授予适当的权限以在存储的过程中使用对称密钥

邪恶博士

我使用以下代码在SQL2012中创建了对称密钥(以Windows Admin用户身份登录):

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '34trg45trgf546t';
CREATE CERTIFICATE SSCert01 WITH SUBJECT = 'SS Certificate 01';
CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE SSCert01;

完成之后,我将加密应用于某些数据库列。仍以Admin身份登录,我可以使用Key成功解密列:

OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE SSCert01;
SELECT
    name,
    surname,
    CONVERT(nvarchar(50),DECRYPTBYKEY(PasswordEnc)) as DecryptedPassword
FROM
    [tbl_Users];
CLOSE SYMMETRIC KEY SSN_Key_01;

然后,将上面的代码放入存储过程中。问题是我的应用程序使用两个角色访问SQL,这两个角色访问相应的proc。当这两个角色中的任何一个试图执行包含上述代码的proc时,我都会看到此错误:

找不到证书“ SSCert01”,因为它不存在或您没有权限。密钥“ SSN_Key_01”未打开。请在使用前打开钥匙。

当我以任一角色身份登录时,他们看不到密钥或证书。因此,任何人都可以建议WHICH授予角色权限,以便他们可以(仅)使用存储过程中的密钥/证书来加密/解密数据。除了加密/解密之外,不允许角色使用密钥/证书执行任何功能。我看过MSDN / Google,但没有一个人更明智。

更新以下代码允许角色使用proc的角色,但我担心CONTROL访问过多。任何人都可以提供一些清晰度吗?

GRANT CONTROL ON CERTIFICATE :: SSCert01 TO Role001;
GRANT CONTROL ON SYMMETRIC KEY :: SSN_Key_01 TO Role001;
偷窃

我通常会解决的方法是将过程设置为以所有者身份执行,然后确保该过程的所有者具有执行解密的正确权限,无论如何,proc的所有者通常都是DBO,因此无需额外操作除了像这样更改过程外,还需要完成配置:

ALTER PROCEDURE proc_name
WITH EXECUTE AS OWNER
AS
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE SSCert01;
SELECT
    name,
    surname,
    CONVERT(nvarchar(50),DECRYPTBYKEY(PasswordEnc)) as DecryptedPassword
FROM
    [tbl_Users];
CLOSE SYMMETRIC KEY SSN_Key_01;

这意味着您完全不必授予应用程序角色或用户任何其他权限。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在存储过程中使用参数值

来自分类Dev

在存储过程中使用提取方法

来自分类Dev

如何在存储过程中使用插入/删除表?

来自分类Dev

在SQL Server中的存储过程中使用循环

来自分类Dev

在存储过程中使用变量作为字符串

来自分类Dev

如何在日期时间存储过程中使用BETWEEN

来自分类Dev

在存储过程中使用WITH,postgres

来自分类Dev

如何在SQL Server存储过程中使用if / else

来自分类Dev

在存储过程中使用列的默认值

来自分类Dev

在存储过程中使用/受益于输出参数

来自分类Dev

如何在存储过程中使用变量

来自分类Dev

在存储过程中使用SAVE TRANSACTION SavePointName

来自分类Dev

如何在Exec存储过程中使用Where子句

来自分类Dev

在存储过程中使用会话变量

来自分类Dev

如何在存储过程中使用openquery?

来自分类Dev

MySQL,在存储过程中使用CONCAT的问题

来自分类Dev

在存储过程中的动态SQL中使用临时表

来自分类Dev

在存储过程中使用参数值

来自分类Dev

在存储过程中使用提取方法

来自分类Dev

授予适当的权限以在存储的过程中使用对称密钥

来自分类Dev

在存储过程中使用if / else进行计算

来自分类Dev

在存储过程中使用dbo的优缺点

来自分类Dev

在存储过程中使用自定义类型

来自分类Dev

在存储过程中使用游标从多个表写入表

来自分类Dev

在存储过程中使用列的默认值

来自分类Dev

如何在SQLServer存储过程中使用case语句

来自分类Dev

如何在存储过程中使用oracle对象类型?

来自分类Dev

在存储过程中使用错误处理

来自分类Dev

如何在存储过程中使用类似语法

Related 相关文章

热门标签

归档