我可能错过了一些显而易见的事情,或者以错误的方式解决了这个问题,但在这里:
我在SQL Server 2005中编写了一个标量CLR函数。它有一个参数(int
)并返回varchar(2000)
。我无法弄清楚如何专门授予sysadmin角色权限并限制任何其他角色(包括db_owner)执行它。
我猜测CLR函数的授予和撤销权限与任何其他UDF相同。这是一个敏感函数,因为它解密了存储在应用程序的SecurityUser表中的密码。除了sysadmin角色的成员之外,我不希望任何人能够运行它。
在数据库中,我首先尝试从数据库授予sysadmin:
grant execute ON dbo.fCrossTabDx1 TO sysadmin
当然收到了错误:
Msg 15151,Level 16,State 1,Line 1
找不到用户 'sysadmin',因为它不存在或您没有权限。
然后我尝试授予db_securityadmin
权限,这是数据库中的一个角色并出错:
Msg 4617,Level 16,State 1,Line 1
不能授予,拒绝或撤销 对特殊角色的权限。
所以,如果有可能的话,会感谢有人指导我正确的方向。
感谢。
答案 0 :(得分:2)
您无法限制安全所有者的权限。根据定义,db_owner
的成员拥有数据库中的每个安全性。函数是一个安全的数据库。因此,您不能将函数的权限限制为dbo或db_owner角色的成员。
你做错了:
阅读并内化Encryption Hierarchy。遵循标准做法。 不发明自己的。