亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL Server中通用數據庫角色權限的處理詳解

2024-08-31 01:05:27
字體:
來源:轉載
供稿:網友

前言

安全性是所有數據庫管理系統的一個重要特征。理解安全性問題是理解數據庫管理系統安全性機制的前提。

最近和同事在做數據庫權限清理的事情,主要是刪除一些賬號;取消一些賬號的較大的權限等,例如,有一些有db_owner權限,我們取消賬號的數據庫角色db_owner,授予最低要求的相關權限。但是這種工作完全是一個體力活,而且是吃力不討好,而且推進很慢。另外,為了管理方便和細化,我們又在常用的數據庫角色外,新增了6個通用的數據庫角色。

如下截圖所示。

SQLServer,數據庫,角色權限

另外,為了減少授權工作量和一些重復的體力活,我們創建了一個作業,每天定期執行一個存儲過程db_common_role_grant_rigths,這個存儲過程的邏輯如下:

    1:遍歷所有用戶數據庫(排除了系統數據庫以及一些特殊數據庫),發現該數據庫不存在這些通用數據庫角色,那么就創建相關數據庫角色。

    2:遍歷所有用戶數據庫,為相關數據庫角色授權,例如,如果發現某個新增的存儲過程,沒有授權給db_procedure_execute數據庫角色。那么就執行授權操作。

當然目前還在測試、應用階段,以后會根據具體相關需求,不斷完善相關功能。

--==================================================================================================================--  ScriptName   :   db_common_role_grant_rigths.sql--  Author    :   瀟湘隱者 --  CreateDate   :   2018-09-13--  Description   :   創建數據庫角色db_procedure_execute等,并授予相關權限給角色。--  Note     :   /******************************************************************************************************************  Parameters    :         參數說明********************************************************************************************************************    @RoleName   :   角色名******************************************************************************************************************** Modified Date Modified User  Version     Modified Reason******************************************************************************************************************** 2018-09-12  瀟湘隱者   V01.00.00  新建該腳本。 2018-09-12  瀟湘隱者   V01.00.01  注意@@ROWCOUNT的生效范圍;解決循環邏輯問題。 2018-09-26  瀟湘隱者   V01.00.02  修正類型為FT(CLR_TABLE_VALUED_FUNCTION)的函數問題。程序集 (CLR) 表值函數*******************************************************************************************************************/--===================================================================================================================USE YourSQLDba;GO  IF EXISTS (SELECT 1 FROM sys.procedures WHERE type='P' AND name='db_common_role_grant_rigths')BEGIN DROP PROCEDURE Maint.db_common_role_grant_rigths;ENDGO CREATE PROCEDURE Maint.db_common_role_grant_rigthsASBEGIN DECLARE @database_id INT;DECLARE @database_name sysname;DECLARE @cmdText  NVARCHAR(MAX);DECLARE @prc_text  NVARCHAR(MAX);DECLARE @RowIndex  INT; IF OBJECT_ID('TempDB.dbo.#databases') IS NOT NULL DROP TABLE dbo.#databases; CREATE TABLE #databases( database_id  INT, database_name sysname) IF OBJECT_ID('TempDB.dbo.#sql_text') IS NOT NULL DROP TABLE dbo.#sql_text;  CREATE TABLE #sql_text( sql_id  INT IDENTITY(1,1), sql_cmd  NVARCHAR(MAX)) INSERT INTO #databasesSELECT database_id ,  nameFROM sys.databasesWHERE name NOT IN ( 'master', 'tempdb', 'model', 'msdb',      'distribution', 'ReportServer',      'ReportServerTempDB', 'YourSQLDba' )  AND state = 0; --state_desc=ONLINE   --開始循環每一個用戶數據庫(排除了上面相關數據庫)WHILE 1= 1BEGIN   SELECT TOP 1 @database_name= database_name  FROM #databases ORDER BY database_id;   IF @@ROWCOUNT =0   BREAK;  --PRINT(@database_name);  -- SP_EXECUTESQL 中切換數據庫不能當參數傳入。  --創建數據庫角色db_procedure_execute SET @cmdText = 'USE ' + @database_name + ';' +CHAR(10)  SELECT @cmdText += 'IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name =''db_procedure_execute'')      BEGIN       CREATE ROLE [db_procedure_execute] AUTHORIZATION [dbo];      END ' + CHAR(10);    --創建數據庫角色db_function_execute SELECT @cmdText += 'IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name =''db_function_execute'')      BEGIN       CREATE ROLE [db_function_execute] AUTHORIZATION [dbo];      END' + CHAR(10);   --創建數據庫角色db_view_table_definition SELECT @cmdText += 'IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name =''db_view_table_definition'')      BEGIN       CREATE ROLE [db_view_table_definition] AUTHORIZATION [dbo];      END ' + CHAR(10);  --創建數據庫角色db_view_view_definition SELECT @cmdText += 'IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name =''db_view_view_definition'')       BEGIN       CREATE ROLE [db_view_view_definition] AUTHORIZATION [dbo];       END ' + CHAR(10);  --創建數據庫角色db_view_procedure_definition SELECT @cmdText += 'IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name =''db_view_procedure_definition'')      BEGIN       CREATE ROLE [db_view_procedure_definition] AUTHORIZATION [dbo];      END ' + CHAR(10);   --創建數據庫角色db_view_function_definition SELECT @cmdText += 'IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name =''db_view_function_definition'')      BEGIN       CREATE ROLE [db_view_function_definition] AUTHORIZATION [dbo];      END ' + CHAR(10);  --PRINT @cmdText; -- EXECUTE SP_EXECUTESQL @cmdText; EXECUTE (@cmdText);    --給角色db_procedure_execute授權  SET @cmdText ='USE ' + QUOTENAME(@database_name) + ';'   SET @cmdText +='INSERT INTO #sql_text(sql_cmd)     SELECT ''GRANT EXECUTE ON '' + SCHEMA_NAME(schema_id) + ''.''      + QUOTENAME(name) + '' TO db_procedure_execute;''      FROM sys.procedures s      WHERE  NOT EXISTS ( SELECT 1            FROM sys.database_permissions p            WHERE p.major_id = s.object_id              AND p.grantee_principal_id = USER_ID(''db_procedure_execute''))';  EXECUTE SP_EXECUTESQL @cmdText;      --給角色db_function_execute(標量函數授權)   SET @cmdText ='USE ' + QUOTENAME(@database_name) + ';'    SET @cmdText += 'INSERT INTO #sql_text(sql_cmd)      SELECT ''GRANT EXEC ON '' + SCHEMA_NAME(schema_id) + ''.'' + QUOTENAME(name) + '' TO db_function_execute; ''       FROM sys.all_objects s      WHERE SCHEMA_NAME(schema_id) NOT IN (''sys'', ''INFORMATION_SCHEMA'')       AND NOT EXISTS ( SELECT 1            FROM sys.database_permissions p            WHERE p.major_id = s.object_id             AND p.grantee_principal_id =USER_ID(''db_function_execute'') )            AND ( s.[type] = ''FN''              OR s.[type] = ''AF''              OR s.[type] = ''FS''              --OR s.[type] = ''FT''             ) ;'  EXECUTE SP_EXECUTESQL @cmdText;     --給角色db_function_execute(表值函數授權)  SET @cmdText ='USE ' + @database_name + ';'   SET @cmdText += 'INSERT INTO #sql_text(sql_cmd)      SELECT ''GRANT SELECT ON '' + SCHEMA_NAME(schema_id) + ''.'' + QUOTENAME(name) + '' TO db_function_execute;''      FROM sys.all_objects s      WHERE SCHEMA_NAME(schema_id) NOT IN (''sys'', ''INFORMATION_SCHEMA'')        AND NOT EXISTS ( SELECT 1            FROM sys.database_permissions p            WHERE p.major_id = s.object_id              AND p.grantee_principal_id = USER_ID(''db_function_execute''))         AND ( s.[type] = ''TF''          OR s.[type] = ''IF''       ) ; '   EXECUTE SP_EXECUTESQL @cmdText;    --查看存儲過程定義授權  SET @cmdText ='USE ' + @database_name + ';'   SET @cmdText +=' INSERT INTO #sql_text(sql_cmd)      SELECT ''GRANT VIEW DEFINITION ON '' + SCHEMA_NAME(schema_id) + ''.''      + QUOTENAME(name) + '' TO db_view_procedure_definition;''       FROM sys.procedures s      WHERE  NOT EXISTS ( SELECT 1            FROM sys.database_permissions p            WHERE p.major_id = s.object_id              AND p.grantee_principal_id = USER_ID(''db_view_procedure_definition''))'   EXECUTE(@cmdText);   --查看函數定義的授權  SET @cmdText ='USE ' + @database_name + ';'   SELECT @cmdText += 'INSERT INTO #sql_text(sql_cmd)       SELECT ''GRANT VIEW DEFINITION ON '' + SCHEMA_NAME(schema_id) + ''.''       + QUOTENAME(name) + '' TO db_view_function_definition;''        FROM sys.objects s       WHERE type_desc IN (''SQL_SCALAR_FUNCTION'', ''SQL_TABLE_VALUED_FUNCTION'',         ''AGGREGATE_FUNCTION'' )         AND NOT EXISTS ( SELECT 1            FROM sys.database_permissions p            WHERE p.major_id = s.object_id              AND p.grantee_principal_id = USER_ID(''db_view_function_definition''))';   EXECUTE SP_EXECUTESQL @cmdText;    --查看表定義的授權  SET @cmdText ='USE ' + @database_name + ';'   SET @cmdText +='INSERT INTO #sql_text(sql_cmd)      SELECT ''GRANT VIEW DEFINITION ON '' + SCHEMA_NAME(schema_id) + ''.''      + QUOTENAME(name) + '' TO db_view_table_definition ;''       FROM sys.tables s      WHERE NOT EXISTS ( SELECT 1            FROM sys.database_permissions p            WHERE p.major_id = s.object_id              AND p.grantee_principal_id = USER_ID(''db_view_table_definition''))';   EXECUTE SP_EXECUTESQL @cmdText;    --查看視圖定義的授權  SET @cmdText ='USE ' + @database_name + ';'   SET @cmdText +='INSERT INTO #sql_text(sql_cmd)      SELECT ''GRANT VIEW DEFINITION ON '' + SCHEMA_NAME(schema_id) + ''.''        + QUOTENAME(name) + '' TO db_view_view_definition; ''      FROM sys.views s      WHERE NOT EXISTS ( SELECT 1            FROM sys.database_permissions p            WHERE p.major_id = s.object_id              AND p.grantee_principal_id = USER_ID(''db_view_view_definition''))';   EXECUTE SP_EXECUTESQL @cmdText;     WHILE 1= 1  BEGIN         SELECT TOP 1 @RowIndex=sql_id, @cmdText = 'USE ' + @database_name + '; '+ sql_cmd FROM #sql_text ORDER BY sql_id;    IF @@ROWCOUNT =0     BREAK;      PRINT(@cmdText);   EXECUTE(@cmdText);    DELETE FROM #sql_text WHERE sql_id =@RowIndex    END       DELETE FROM #databases WHERE database_name=@database_name;END    DROP TABLE #databases;  DROP TABLE #sql_text; END

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品老女人精品视频| 国产精品丝袜视频| 欧美日韩一区免费| 久久精品国产综合| 亚洲色图色老头| 中文字幕日韩欧美在线视频| 国产精品视频成人| 日韩精品久久久久| 中文字幕在线观看日韩| 97香蕉超级碰碰久久免费的优势| 欧美高清视频在线观看| 亚洲男人天堂2024| 91精品国产乱码久久久久久久久| 91国内精品久久| 欧美激情精品久久久久| 7777免费精品视频| 亚洲qvod图片区电影| 97精品国产97久久久久久| 国产精品丝袜一区二区三区| 国产在线拍揄自揄视频不卡99| 日韩少妇与小伙激情| 中文字幕av一区二区| 亚洲精品98久久久久久中文字幕| 亚洲最大激情中文字幕| 国产乱人伦真实精品视频| 91色视频在线导航| 91超碰caoporn97人人| 丝袜亚洲另类欧美重口| 热re91久久精品国99热蜜臀| 日本亚洲欧美成人| 国产精品久久久久av免费| 国产亚洲一区精品| 亚洲精品国产suv| 国产成人午夜视频网址| 亚洲欧美国产制服动漫| 亚洲第一视频网| 综合网日日天干夜夜久久| 中文字幕视频在线免费欧美日韩综合在线看| 国产成人avxxxxx在线看| 国产精品爱啪在线线免费观看| 热99精品里视频精品| 欧美中文在线字幕| 国产一区二区三区视频免费| 91精品在线播放| 亚洲第一免费网站| www国产精品视频| 亚洲欧美日本伦理| 国产精品美女免费看| 久久香蕉国产线看观看av| 亚洲一区二区免费在线| 欧美黑人视频一区| 亚洲综合日韩中文字幕v在线| 热门国产精品亚洲第一区在线| 亚洲美女av网站| 亚洲精品v天堂中文字幕| 国产精品色视频| 精品国产福利在线| 精品国偷自产在线视频| 国内精品中文字幕| 91色琪琪电影亚洲精品久久| 亚洲精品第一页| 欧美精品福利在线| xxxx欧美18另类的高清| 日韩激情第一页| 日韩精品极品视频| 欧美色视频日本高清在线观看| 亚洲尤物视频网| 亚洲第一国产精品| 欧美老妇交乱视频| 国产一区二区三区在线视频| 亚洲国产欧美一区二区三区久久| 亚洲第一精品久久忘忧草社区| 欧美激情综合色| 欧美一级片久久久久久久| 亚洲欧美日韩中文视频| 欧美激情一区二区久久久| 亚洲一区二区三区乱码aⅴ| 国产精品日韩在线播放| 欧美大片大片在线播放| 日韩视频免费看| 亚洲а∨天堂久久精品喷水| 日韩黄色在线免费观看| 国产精品白嫩初高中害羞小美女| 日韩av片电影专区| 亚洲视频网站在线观看| 国产69精品久久久| 91久久久久久久| 久久精品视频播放| 日韩黄色高清视频| 日韩av中文字幕在线免费观看| 91在线观看免费高清| 91精品国产91久久久久久| 成人精品aaaa网站| 国产精品吊钟奶在线| 久久99国产精品久久久久久久久| 欧美激情a在线| 久久天堂av综合合色| 97香蕉超级碰碰久久免费的优势| 国产精品aaaa| 欧美电影免费观看高清| 国产一区视频在线播放| 538国产精品一区二区免费视频| 九九热99久久久国产盗摄| 亚洲欧美一区二区三区情侣bbw| 亚洲欧洲一区二区三区在线观看| 欧美久久精品一级黑人c片| 国产精品成人av性教育| 久久在线免费视频| 国产欧美中文字幕| 欧美极品少妇xxxxx| 欧美日本高清视频| 亚洲男人的天堂在线| 欧美亚洲国产日韩2020| 有码中文亚洲精品| 欧美日韩视频免费播放| 奇米四色中文综合久久| 国产在线视频欧美| 疯狂欧美牲乱大交777| 亚洲精品中文字幕女同| 91精品在线观看视频| 97国产精品免费视频| 国产精自产拍久久久久久| 亚洲人精选亚洲人成在线| 性色av一区二区三区红粉影视| 国产aaa精品| 97碰在线观看| 国产精品爽爽爽| 亚洲精品国产综合久久| 色av中文字幕一区| 日韩精品极品在线观看播放免费视频| 亚洲欧美成人精品| 在线亚洲欧美视频| 日本视频久久久| 成人看片人aa| 国模吧一区二区三区| 在线观看国产精品日韩av| 成人看片人aa| 777午夜精品福利在线观看| 91国内免费在线视频| 亚洲欧洲国产精品| 欧美成人三级视频网站| 欧美性猛交xxxx富婆| 最近2019中文字幕大全第二页| 国产日韩欧美自拍| 国产91久久婷婷一区二区| 久久久www成人免费精品张筱雨| 亚洲成av人影院在线观看| 有码中文亚洲精品| 日韩欧美999| 国产精品久久久久久久久久久久久久| 韩国一区二区电影| 欧美精品激情在线观看| 揄拍成人国产精品视频| 亚洲国产欧美在线成人app| 欧美黑人极品猛少妇色xxxxx| 成人久久18免费网站图片| 一本色道久久88综合亚洲精品ⅰ| 国产精品一区专区欧美日韩| 欧美最顶级的aⅴ艳星| 国产精品ⅴa在线观看h| 欧美日韩在线视频一区| 欧美精品18videos性欧美| 91精品国产网站| 日韩成人性视频|