为许多存储过程的数据库角色授予 Exec 权限的快速方法

发布于 2024-07-26 16:58:42 字数 716 浏览 1 评论 0原文

考虑数据库具有 SQL 数据库角色或应用程序角色的场景。 该任务是向 n 个存储过程授予执行权限。

使用 SQL Management Studio 时,有一个很好的屏幕可以帮助将权限应用于角色的对象。

SQL 管理工作室

以下是应用权限的步骤:

  • 在安全对象列表中选择要授予/拒绝权限的对象。
  • 导航到下面的显式权限列表。
  • 根据需要选择授予或拒绝复选框。

n 个对象重复上述操作。 在对 100 多个物体进行此操作时,放一些音乐来娱乐自己! 一定有更好的方法! 这是一次主要的点击盛会。

问题

使用 SQL Server Management Studio 2005 是否有更快的方法来执行此任务? 也许另一个 GUI 工具(最好是免费的)?

对于创建 T-SQL 脚本来自动执行此任务有什么建议吗? 即创建一个包含所有存储过程名称的表,循环并应用 exec 权限?

Consider the scenario where a database has a SQL Database Role or Application Role. The task is to grant Execute permissions to n stored procedures.

When using SQL Management Studio, there's a nice screen to help apply permissions to objects for a Role.

SQL Management Studio

Here are the steps to apply permissions:

  • select the object that you want to grant/deny permissions in the list of Securables.
  • navigate to the list of Explicit Permissions below.
  • select the Grant or Deny checkbox as appropriate.

Repeat the above for n objects. Fire up some music to keep yourself entertained while doing this for 100+ objects! There's got to be a better way! It's a clickfest of major proportions.

Question:

Is there a faster way to perform this task using SQL Server Management Studio 2005? Perhaps another GUI tool (preferably free)?

Any suggestions for creating T-SQL scripts to automatically perform this task? i.e. create a table of all stored procedure names, loop, and apply the exec permissions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

过气美图社 2024-08-02 16:58:42
USE database_name;
GRANT EXECUTE TO [security_account];

不要忘记括号:)

USE database_name;
GRANT EXECUTE TO [security_account];

Don't forget the brackets :)

守护在此方 2024-08-02 16:58:42

你可以这样做,但是我不完全确定这有多安全。

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

you can do this, however I'm not entirely sure how secure this is.

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
青柠芒果 2024-08-02 16:58:42

这应该可以做到:

CREATE PROC SProcs_GrantExecute( 
    @To AS NVARCHAR(255)
    , @NameLike AS NVARCHAR(MAX)
    , @SchemaLike as NVARCHAR(MAX) = N'dbo'
    ) AS
/*
 Proc to Authorize a role for a whole bunch of SProcs at once
*/
DECLARE @sql as NVARCHAR(MAX)
SET @sql = ''

SELECT @sql = @sql + '
 GRANT EXECUTE ON OBJECT::['+ROUTINE_SCHEMA+'].['+ROUTINE_NAME+'] TO '+@To+';'
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME LIKE @NameLike
 AND ROUTINE_SCHEMA LIKE @SchemaLike

PRINT @sql
EXEC(@sql)

这确实是可注入的,因此仅供管理员使用。


我只想补充一点,Remus 关于使用模式的建议是可行的首选方法。

This should do it:

CREATE PROC SProcs_GrantExecute( 
    @To AS NVARCHAR(255)
    , @NameLike AS NVARCHAR(MAX)
    , @SchemaLike as NVARCHAR(MAX) = N'dbo'
    ) AS
/*
 Proc to Authorize a role for a whole bunch of SProcs at once
*/
DECLARE @sql as NVARCHAR(MAX)
SET @sql = ''

SELECT @sql = @sql + '
 GRANT EXECUTE ON OBJECT::['+ROUTINE_SCHEMA+'].['+ROUTINE_NAME+'] TO '+@To+';'
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME LIKE @NameLike
 AND ROUTINE_SCHEMA LIKE @SchemaLike

PRINT @sql
EXEC(@sql)

This is Injectable as heck, so keep it for Admin use only.


I just want to add that Remus's suggestion of using schemas is the preferred approach, where that is workable.

洋洋洒洒 2024-08-02 16:58:42

最简单的方法是:

GRANT EXECUTE ON myproc TO x

其中 x =

  1. SQL 用户
  2. 角色
  3. AD 组/帐户

Easiest way is to:

GRANT EXECUTE ON myproc TO x

where x =

  1. SQL User
  2. Role
  3. AD Group/Account
送你一个梦 2024-08-02 16:58:42

只需更新 dbo 架构并设置将此架构的 EXECUTE 权限添加到所需的用户/角色即可。

Simply update the dbo schema and set add an EXECUTE permission on this schema to the desired user/role.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文