我可能遗漏了一些明显的东西或者以错误的方式处理这个问题,但这里是:
我在 SQL Server 2005 中编写了一个标量 CLR 函数。它有一个参数 (int
),并返回一个 varchar(2000)
。我无法弄清楚如何专门向 sysadmin 角色授予权限并限制任何其他角色(包括 db_owner)执行它。
我猜测 CLR 函数的授予和撤销权限与任何其他 UDF 相同。这是一个敏感函数,因为它会解密存储在应用程序的 SecurityUser 表中的密码。我不希望除了系统管理员角色的成员之外的任何人都能够运行它。
在数据库中,我首先尝试从数据库授予sysadmin:
grant execute ON dbo.fCrossTabDx1 TO sysadmin
当然收到了错误:
Msg 15151, Level 16, State 1, Line 1
Cannot find the user 'sysadmin', because it does not exist or you do not have permission.
然后,我尝试向数据库中的角色 db_securityadmin
授予权限,但出现错误:
Msg 4617, Level 16, State 1, Line 1
Cannot grant, deny or revoke permissions to or from special roles.
因此,如果可能的话,希望有人引导我朝正确的方向前进。
- 我可以限制具有 db_owner 权限的用户执行函数吗?
- 我可以只允许 sysadmin 角色对函数执行权限吗?
谢谢。
最佳答案
您无法限制安全所有者的权限。根据定义,db_owner
的成员拥有数据库中的每个安全对象。函数是数据库安全的。因此,您不能将函数的权限限制为 dbo 或 db_owner 角色的成员。
你做错了:
- 滚动您自己的加密/解密函数。使用built in encryption functions .
- 依赖权限来保证加密安全。您应该依赖解密密码的知识,即。 知道密码的人可以解密数据。
- 我很确定您的 CLR 函数内置了解密密码,即。您将解密 key 嵌入到代码中,这是一个很大很大的禁忌。
一定要阅读并内化 Encryption Hierarchy 。请遵循标准做法。不要不要发明自己的东西。
关于sql-server - 将用户定义的 CLR 函数的执行限制为 sysadmin 而不是 dbowner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178219/