2015-05-06 27 views
0
create procedure SP_INS_PUBLIC_NHANVIEN 
    @manv varchar(20), 
    @hoten nvarchar(100), 
    @email varchar(20), 
    @luongcb varbinary , 
    @tendn nvarchar(100), 
    @mk varchar 

as 
    create asymmetric key mahoaluongi 
     with algorithm = RSA_512 
     encryption by password = @mk 
    insert into nhanvien values (@manv,@hoten,@email,ENCRYPTBYASYMKEY(mahoaluongi,@luongcb),@tendn,HASHBYTES('SHA1',@mk),@manv) 
    drop asymmetric key mahoaluongi 
go 

我想每次都創建一個新的非對稱密鑰,並從存儲過程的參數傳遞。 我得到一個錯誤使用可變密碼在SQL中創建非對稱密鑰(來自存儲過程)

@mk附近的語法不正確。期待STRING或TEXT_LEX。

但是使用castconvert從varchar轉換爲STRING是不可能的。

我使用SQL Server 2014

+1

旁註:你應該** **不使用'sp_'前綴爲您的存儲過程。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

+0

每次在nhanvien中插入新記錄然後刪除它時,創建一個新的非對稱密鑰並不是一個好主意。以後如何解密數據? – ughai

+0

@ughai我使用_mk作爲密碼來登錄並加密另一列。因此,我需要在存儲過程 –

回答

0

我建議使用Exec命令如下查詢:

create procedure SP_INS_PUBLIC_NHANVIEN 
    @manv varchar(20), 
    @hoten nvarchar(100), 
    @email varchar(20), 
    @luongcb varbinary , 
    @tendn nvarchar(100), 
    @mk varchar 

as 
    DECLARE @C NVARCHAR(MAX) = 
    'create asymmetric key mahoaluongi 
     with algorithm = RSA_512 
     encryption by password = '''[email protected]+'''' 
    EXEC(@C) 
    insert into nhanvien values (@manv,@hoten,@email,ENCRYPTBYASYMKEY(ASYMKEY_ID('mahoaluongi'),@luongcb),@tendn,HASHBYTES('SHA1',@mk),@manv) 
    Exec('drop asymmetric key mahoaluongi') 
+0

內對其進行加密,但在加密密鑰功能 –

+0

@QuangVĩnhHà上仍然存在'無效列名稱mahoaluongi'。我改變了我的代碼。請再檢查一次。 –

0
ALTER PROCEDURE SP_INS_ENCRYPTED_KEY @name VARCHAR(20) 
    ,@age INT 
    ,@city VARCHAR(20) 
    ,@mk VARCHAR(20) 
AS 
CREATE asymmetric KEY mahoaluongi 
    WITH algorithm = RSA_512 ENCRYPTION BY password = N'@mk' 

INSERT INTO [email protected] 
VALUES (
    @name 
    ,@age 
    ,ENCRYPTBYASYMKEY(AsymKey_ID('mahoaluongi'), @city) 
    ) 

DROP asymmetric KEY mahoaluongi 
GO