将用户定义的CLR函数的执行限制为sysadmin而不是dbowner

时间:2012-04-16 16:44:27

标签: sql-server sql-server-2005 sqlclr

我可能错过了一些显而易见的事情,或者以错误的方式解决了这个问题,但在这里:

我在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
  不能授予,拒绝或撤销   对特殊角色的权限。

所以,如果有可能的话,会感谢有人指导我正确的方向。

  1. 我是否可以限制具有db_owner权限的用户执行函数和
  2. 我是否只允许对函数执行sysadmin角色执行权限?
  3. 感谢。

1 个答案:

答案 0 :(得分:2)

您无法限制安全所有者的权限。根据定义,db_owner的成员拥有数据库中的每个安全性。函数是一个安全的数据库。因此,您不能将函数的权限限制为dbo或db_owner角色的成员。

你做错了:

  • 滚动您自己的加密/解密功能。使用built in encryption functions
  • 依赖加密安全性的权限。您应该依赖解密密码的知识,即。数据可以由知道密码的人解密。
  • 我很确定您的CLR功能内置了解密密码,即。你在代码中嵌入了解密密钥,这是一个很大的禁忌。

阅读并内化Encryption Hierarchy。遵循标准做法。 发明自己的。