开发者社区 问答 正文

实施将对数据库中所有用户表的数据库角色授予权限的SQL脚本的最佳方法是什么?

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

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

展开
收起
心有灵_夕 2019-12-26 22:25:48 598 分享 版权
1 条回答
写回答
取消 提交回答
  • Zimmerman博士在这里是对的。我想写一个存储过程,该过程具有游标,通过使用立即执行来影响授予的用户对象循环。像这样:

    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
    
    2019-12-26 22:26:15
    赞同 展开评论