关于sql server:实现SQL脚本的最佳方法是什么,该脚本将对数据库中所有用户表的数据库角色授予权限?

关于sql server:实现SQL脚本的最佳方法是什么,该脚本将对数据库中所有用户表的数据库角色授予权限?

What's the best way to implement a SQL script that will grant permissions to a database role on all the user tables in a database?

实现SQL脚本的最佳方法是什么,该脚本将授予数据库角色对数据库中所有用户表的选择,引用,插入,更新和删除权限?

理想情况下,此脚本可以多次运行,因为新表已添加到数据库中。 SQL Server Management Studio会为单个数据库对象生成脚本,但是我正在寻找更多的"即发即弃"脚本。


我敢肯定有一种更简单的方法,但是您可以遍历数据库中的sysobjects表,并向存在的任何用户表对象授予权限。每当添加新表时,您都可以多次运行该命令。


有一个未记录的MS过程,称为sp_MSforeachtable,您可以使用它,该过程肯定在2000年和2005年。

要授予选择权限,用法是:

1
EXECUTE sp_MSforeachtable @command1=' Grant Select on ? to RoleName'

要授予其他权限,请为每个权限添加一条新语句,或仅将其添加到命令中,如下所示:

1
EXECUTE sp_MSforeachtable @command1=' Grant Select on ? to RoleName; Grant Delete on ? to RoleName;'

稍作调整后,也有可能将角色名称也转换为参数。


齐默尔曼博士在这里正确。我希望编写一种存储过程,该存储过程具有游标在用户对象之间循环,并使用立即执行来影响授予。像这样的东西:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 IF EXISTS (
    SELECT 1 FROM sysobjects
    WHERE name = 'sp_grantastic'
    AND TYPE = 'P'
)
DROP PROCEDURE sp_grantastic
GO
CREATE PROCEDURE sp_grantastic
AS
DECLARE
 @object_name VARCHAR(30)
,@TIME       VARCHAR(8)
,@rights     VARCHAR(20)
,@ROLE       VARCHAR(20)

DECLARE c_objects CURSOR FOR
    SELECT  name
    FROM    sysobjects
    WHERE   TYPE IN ('P', 'U', 'V')
    FOR READ ONLY

BEGIN

    SELECT  @rights = 'ALL'
           ,@ROLE = 'PUBLIC'

    OPEN c_objects
    WHILE (1=1)
    BEGIN
        FETCH c_objects INTO @object_name
        IF @@SQLSTATUS <> 0 BREAK

        SELECT @TIME = CONVERT(VARCHAR, GetDate(), 108)
        PRINT '[%1!] hitting up object %2!', @TIME, @object_name
        EXECUTE('GRANT '+ @rights +' ON '+ @object_name+' TO '+@ROLE)

    END

    PRINT '[%1!] fin!', @TIME

    CLOSE c_objects
    DEALLOCATE CURSOR c_objects
END
GO
GRANT ALL ON sp_grantastic TO PUBLIC
GO

然后您可以开除并忘记:

1
EXEC sp_grantastic

1
2
3
4
5
6
7
8
9
10
11
12
13
USE [YourDb]
GO
EXEC sp_MSforeachtable @command1=
   "GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON ? TO Admins, Mgmt",
    @whereand =" and o.name like 'tbl_%'"
GO

USE [YourDb]
GO
EXEC sp_MSforeachtable @command1=
   "GRANT REFERENCES, SELECT ON ? TO Employee, public",
    @whereand =" and o.name like 'tbl_%'"
GO

我们在工作地点也使用类似的内容。遍历系统的每个表,视图,存储过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CREATE PROCEDURE dbo.SP_GrantFullAccess
    @username VARCHAR(300)
AS

DECLARE @ON VARCHAR(300)
DECLARE @COUNT INT
SET @COUNT = 0

PRINT 'Granting access to user ' + @username + ' on the following objects:'

DECLARE c CURSOR FOR
SELECT name FROM sysobjects WHERE TYPE IN('U', 'V', 'SP', 'P') ORDER BY name
OPEN c
FETCH NEXT FROM c INTO @ON
WHILE @@FETCH_STATUS = 0
BEGIN
 SET @COUNT = @COUNT + 1
 EXEC('GRANT ALL ON [' + @ON + '] TO [' + @username + ']')
 --PRINT 'GRANT ALL ON [' + @on + '] TO ' + @username
 PRINT @ON
 FETCH NEXT FROM c INTO @ON
END
CLOSE c
DEALLOCATE c

PRINT 'Granted access to ' + CAST(@COUNT AS VARCHAR(4)) + ' object(s).'
GO

推荐阅读

    linux权限命令实验?

    linux权限命令实验?,管理,西安,基础,代码,系统,工具,概念,分析,设计,时间,lin

    linux下删除用户命令?

    linux下删除用户命令?,系统,代码,邮箱,用户组,命令,用户,名称,管理,电脑,账

    用户id的linux命令?

    用户id的linux命令?,系统,密码,信息,联系方式,地址,位置,用户,命令,用户名,

    linux执行权限命令行?

    linux执行权限命令行?,地址,电脑,系统,数字,工作,权限,目录,文件,新增,信息,L

    linux把命令变成脚本?

    linux把命令变成脚本?,系统,环境,工作,脚本,命令,信息,基础,代码,文件,变量,

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux下用户权限命令?

    linux下用户权限命令?,管理,系统,密码,地址,权限,时间,基础,信息,基本知识,

    linux改文件权限命令?

    linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,

    linux脚本命令输信息?

    linux脚本命令输信息?,系统,信息,代码,脚本,数据,工具,发行,命令,变量,文件,l

    linux上启动脚本命令?

    linux上启动脚本命令?,服务,状态,系统,代码,脚本,工作,周期性,命令,文件,方

    linux登陆用户命令?

    linux登陆用户命令?,系统,工具,信息,地址,软件,工作,命令,数字,服务,名称,Lin

    linux用户名改名命令?

    linux用户名改名命令?,系统,密码,命令,代码,名称,用户名,用户,终端,主机名,

    linux释放权限的命令?

    linux释放权限的命令?,系统,档案,代码,地址,密码,命令,管理,工具,工作,简介,L

    linux用户分组命令?

    linux用户分组命令?,系统,命令,电脑,信息,时间,标准,资料,用户,文件,用户组,L

    linux命令改用户所属?

    linux命令改用户所属?,系统,文件,名称,用户组,命令,用户,名录,基本知识,所

    linux建立数据库命令?

    linux建立数据库命令?,软件,系统,工作,数据,密码,工具,数据库,一致,网络,服

    linux系统用户组命令?

    linux系统用户组命令?,系统,管理,密码,代码,用户组,用户,命令,邮箱,电脑,名

    linux用户管理的命令?

    linux用户管理的命令?,系统,管理,信息,地址,工作,用户,单位,基础,数据,命令,L

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux用户退出命令行?

    linux用户退出命令行?,状态,档案,标准,系统,命令,文件,模式,编辑,指令,主机,l