2

我可能遗漏了一些明显的东西或以错误的方式处理这个问题,但它是这样的:

我在 SQL Server 2005 中编写了一个标量 CLR 函数。它有一个参数 ( int) 并返回一个varchar(2000). 我无法弄清楚如何专门向 sysadmin 角色授予权限并限制任何其他角色(包括 db_owner)执行它。

我猜 CLR 函数的授予和撤销权限与任何其他 UDF 相同。这是一个敏感函数,因为它会解密存储在应用程序的 SecurityUser 表中的密码。我不希望任何人能够运行它,除了 sysadmin 角色的成员。

在数据库中,我首先尝试从数据库授予 sysadmin:

grant execute ON dbo.fCrossTabDx1 TO sysadmin

当然收到错误:

消息 15151,级别 16,状态 1,行 1
找不到用户 'sysadmin',因为它不存在或您没有权限。

然后我尝试授予权限db_securityadmin,这是数据库中的一个角色,但出现错误:

消息 4617,级别 16,状态 1,第 1 行
无法授予、拒绝或撤销特殊角色的权限。

因此,如果可能的话,将不胜感激有人引导我朝着正确的方向前进。

  1. 我可以限制具有 db_owner 权限的用户执行函数吗?
  2. 我可以只允许一个函数的 sysadmin 角色执行权限吗?

谢谢。

4

1 回答 1

2

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

你这样做是不对的:

  • 滚动您自己的加密/解密功能。使用内置的加密功能
  • 依赖于加密安全的权限。您应该依靠解密密码的知识,即。知道密码的人可以解密数据。
  • 我很确定您的 CLR 函数具有内置的解密密码,即。您将解密密钥嵌入代码中,这是一个很大的禁忌。

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

于 2012-04-16T17:03:51.693 回答