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 循环遍历所有用户表和视图以授予某些特权,同时排除几个对象?
呃,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)
| 归档时间: |
|
| 查看次数: |
20843 次 |
| 最近记录: |