授予对 SQL Server 2000 中所有表、视图、过程的权限

Geo*_*wdy 8 sql-server permissions sql-server-2000

我想知道是否有一种相当有效的方法来使用 T-SQL 和 SQL Server 2000 语法在特定数据库的所有 TABLES 和 VIEWS 上进行 GRANT SELECT、INSERT、UPDATE、DELETE,同时排除 100 多个对象中的 2 个或 3 个。我还希望能够授予对所有存储过程的 EXEC 权限。

目前我正在使用下面的代码来一一更改它们。为大约 100 个表和 100 个视图执行此操作花费的时间太长,并且通过 GUI 将花费更长的时间(除非我也做错了)。

use [DATABASE_NAME]
GO
GRANT DELETE ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT INSERT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT SELECT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT UPDATE ON [dbo].[table_name]TO [user_name]
GO
Run Code Online (Sandbox Code Playgroud)

如何使用 T-SQL 循环遍历所有用户表和视图以授予某些特权,同时排除几个对象?

Aar*_*and 8

呃,2000。

假设所有对象都归 拥有dbo,您可以生成一个脚本,例如:

SELECT N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type IN (N'U', N'V');

SELECT N'GRANT EXECUTE ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'P';
Run Code Online (Sandbox Code Playgroud)

现在您可以复制并粘贴输出,以防您想排除任何条目或进行验证。如果您只想盲目执行,您可以改为执行此操作,但它依赖于小于 4K 的任何单个命令集的内容:

DECLARE @sql NVARCHAR(4000) = N'';

SELECT @sql = @sql + N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'U';

EXEC sp_executesql @sql;

SET @sql = N'';

SELECT @sql = @sql + N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'V';

EXEC sp_executesql @sql;

SET @sql = N'';

SELECT @sql = @sql + N'GRANT EXECUTE ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'P';

EXEC sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)