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

标签 sql-server sql-server-2005 sqlclr

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

我在 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.

因此,如果可能的话,希望有人引导我朝正确的方向前进。

  1. 我可以限制具有 db_owner 权限的用户执行函数吗?
  2. 我可以只允许 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/

相关文章:

sql - 如何使用OUTPUT捕获新旧ID?

c# - 如何更改 Entity Framework 为 Datetime 生成 SQL 精度的方式

sql - 如何通过列名查找数据库名和表名

sql-server - 全文搜索排名(SQL Server)

sql-server - 清除方案中的所有数据,保持结构完好无损

java - 尝试使用 Fitnesse 和 DbFit 以及 SQL Server 时出现 SQLServerException

c# - SqlBulkCopy 拒绝将 String.Empty 转换为 INT NULL

c# - dbType NVarChar 对于此构造函数无效

c# - 我应该在 SqlClr 中运行 F# 吗?

c# - 从 SQL CLR 调用 Web 服务?