SELECT只访问具有访问权限的SQL Server执行任何标量UDF

时间:2014-09-18 15:47:56

标签: sql-server permissions

我正在寻找最佳方式(最佳实践)和/或最少的管理工作,以允许用户只读(仅限SELECT)访问数据库使用任何标量UDF在数据库中定义。我可以通过仅将db_datareader角色分配给用户Login来完成任务的第一部分。但是,用户无法在此数据库(SQL Server 2008 R2)中查看或执行任何标量UDF。我知道你可以在My_UDF上运行GRANT EXECUTE到MY_USER,它会工作,它将允许用户访问。但是,这有两个问题。首先,我们有数百个UDF,我们需要遍历所有这些UDF,为每个UDF提供用户EXECUTE。其次,每当创建新的UDF时,我们都需要再次向此READ-ONLY用户发出此命令。

目标是尽可能少地授予用户权限,但仍允许他们执行SELECT(无UPDATE,INSERT或DELETE)并且能够在SELECTS中使用任何UDF。

2 个答案:

答案 0 :(得分:0)

如果您使用的是SQL Server 2005及更高版本,则可以尝试GRANT EXECUTE TO [MyDomain\MyUser]

这将为数据库级别的用户提供Execute权限,包括任何存储过程。

答案 1 :(得分:0)

除了将它们放在自己的架构中(根据你上面说的,似乎不可行),我认为你仍然坚持在对象层面授予权限。幸运的是,使用一些PowerShell和肘部油脂并不太难。

import-module sqlps;

$perms = new-object Microsoft.SqlServer.Management.Smo.ObjectPermissionSet;
$perms.Execute = $true;

$srv = new-object microsoft.sqlserver.management.smo.server 'yourServer'
$db = $srv.databases['yourDb'];
foreach ($f in $db.UserDefinedFunctions) {
    $f.grant($perms, 'some grantee')
}