使用可变密码(从存储过程)在SQL中创建非对称密钥
我想创建一个新的非对称密钥,每次使用新密码,从存储过程的参数传递。 我犯了一个错误 @mk附近的语法不正确。应为字符串或文本 但使用使用可变密码(从存储过程)在SQL中创建非对称密钥,sql,sql-server,stored-procedures,encryption,sql-server-2014,Sql,Sql Server,Stored Procedures,Encryption,Sql Server 2014,我想创建一个新的非对称密钥,每次使用新密码,从存储过程的参数传递。 我犯了一个错误 @mk附近的语法不正确。应为字符串或文本 但使用cast或convert无法将varchar转换为字符串 我正在使用SQL server 2014我建议使用Exec命令进行以下查询: create procedure SP_INS_PUBLIC_NHANVIEN @manv varchar(20), @hoten nvarchar(100), @email varchar(20),
cast
或convert
无法将varchar转换为字符串
我正在使用SQL server 2014我建议使用Exec命令进行以下查询:
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
试试这个:
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 Emp@236186
VALUES (
@name
,@age
,ENCRYPTBYASYMKEY(AsymKey_ID('mahoaluongi'), @city)
)
DROP asymmetric KEY mahoaluongi
GO
旁注:存储过程不应使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀!每次在nhanvien
中插入新记录并删除它时,创建一个新的非对称密钥不是一个好主意。之后您将如何解密数据?@ughai我使用_mk作为密码登录并加密另一列。因此,我需要在存储过程中对其进行加密,因为它在encryptbyasymkey中仍然具有“无效列名Mahoalongi”function@QuangVĩnhHá。我改了密码。请再次检查。请考虑向代码中添加说明,以便我们理解为什么它解决了OP问题。
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 Emp@236186
VALUES (
@name
,@age
,ENCRYPTBYASYMKEY(AsymKey_ID('mahoaluongi'), @city)
)
DROP asymmetric KEY mahoaluongi
GO
CREATE PROCEDURE SP_INS_PUBLIC_NHANVIEN
@MANV VARCHAR(20) ,
@HOTEN NVARCHAR(100),
@EMAIL VARCHAR (20),
@LUONGCB VARCHAR(100),
@TENDN NVARCHAR(100),
@MK VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX);
IF ASYMKEY_ID(@MANV) IS NULL
BEGIN
SET @SQL = 'CREATE ASYMMETRIC KEY ' + QUOTENAME(@MANV) + ' ' +
'WITH ALGORITHM = RSA_2048 ' +
'ENCRYPTION BY PASSWORD = ' + QUOTENAME(@MK , NCHAR(39))
EXEC (@SQL)
END
DECLARE @MATKHAU_SHA1 VARBINARY(MAX);
SET @MATKHAU_SHA1 = CONVERT(VARBINARY(MAX),HASHBYTES('SHA1', @MK));
DECLARE @LUONG_RSA512 VARBINARY(MAX);
SET @LUONG_RSA512 = ENCRYPTBYASYMKEY(ASYMKEY_ID(@MANV), @LUONGCB);
DECLARE @PUBKEY NVARCHAR(20);
SELECT @PUBKEY = CONVERT(NVARCHAR(20),@MANV);
INSERT INTO DBO.NHANVIEN
VALUES (@MANV, @HOTEN, @EMAIL, ENCRYPTBYASYMKEY(ASYMKEY_ID(@MANV), @LUONGCB), @TENDN, @MATKHAU_SHA1,@PUBKEY);
END
GO