SQL Server中通用資料庫角色許可權處理

来源:https://www.cnblogs.com/kerrycode/archive/2018/09/28/9719901.html
-Advertisement-
Play Games

SQL Server中通用資料庫角色許可權處理 最近和同事在做資料庫許可權清理的事情,主要是刪除一些賬號;取消一些賬號的較大的許可權等,例如,有一些有db_owner許可權,我們取消賬號的資料庫角色db_owner,授予最低要求的相關許可權。但是這種工作完全是一個體力活,而且是吃力不討好,而且推進很慢。另外,... ...


SQL Server中通用資料庫角色許可權處理

 

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

 

clip_image001

 

 

另外,為了減少授權工作量和一些重覆的體力活,我們創建了一個作業,每天定期執行一個存儲過程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;
END
GO
 
CREATE PROCEDURE Maint.db_common_role_grant_rigths
AS
BEGIN
 
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 #databases
SELECT  database_id ,
        name
FROM    sys.databases
WHERE   name NOT IN ( 'master', 'tempdb', 'model', 'msdb',
                        'distribution', 'ReportServer',
                        'ReportServerTempDB', 'YourSQLDba' )
        AND state = 0; --state_desc=ONLINE 
 
 
--開始迴圈每一個用戶資料庫(排除了上面相關資料庫)
WHILE 1= 1
BEGIN
 
 
    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
            

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在win7電腦上使用遠程連接連接一臺伺服器時,出現發生身份驗證錯誤要求的函數不受支持的錯誤,原因是本地組策略配置錯誤,如下圖: 解決辦法: 進入windows命令行模式輸入命令: 會彈出本地策略組編輯器: 選擇:電腦配置>管理模板>系統>憑據分配>加密Oracle修正,如下圖: 選中後滑鼠右鍵進行 ...
  • 參考資料: https://docs.konghq.com/install/source/ 環境準備:操作系統 centeros7.3 1 :openssl和pcre一般系統自帶,如果沒有可自己安裝 https://www.openssl.org/source/ 或者 yum -y install ...
  • 摘要: 今天對物理數據表,進行增加列操作後,程式一直顯示無法找到相應列,通過仔細比對發現,視圖中無相應列更新,下文將具體的解決方法分享如下: 例: 轉自:http://www.maomao365.com/?p=7471 ...
  • 在拉薩藏民的客棧里,氣溫18度,碧藍的天空里大朵大朵飽滿的雲朵,耳機里放的陳鴻宇的民謠,下午五點正值陽光最佳,暖和和的氛圍里,有點小高反,所以這次,不寫技術博文,想寫下今年的一些人與事,刪減部分,留下職場部分。 如果轉載,請註明博文來源: www.cnblogs.com/xinysu/ ,版權歸 博 ...
  • [20180926]神奇的規避ORA-01795方法.txt--//大家知道in裡面的值限制1000個值,如果超出報ORA-01795錯誤.D:\> ooerr 0179501795, 00000, "maximum number of expressions in a list is 1000"D ...
  • 深入理解redis數據類型:String,Lists,Sets,Sorted Sets,Hashes,Bitmaps,HyperLogLogs等 ...
  • 1、如device表中的identity欄位正常的欄位長度是32位,但是某些不正常的數據,後面多出空格,需要去掉後面的空格,可執行以下命令: 2、使用substring函數截取某欄位的的其中一部分的方法,如截取identity第21位及其之後的數據,並保存位identity12欄位: ...
  • 這篇博客是在學習MySQL Server 5.7版的源代碼過程中編寫的第一個學習筆記,主要內容包括: 連接處理總體過程 連接監聽總體過程 登錄驗證 命令交互總體過程 命令的種類 命令的執行結果 支持的協議以及相關的類 連接處理總體過程 在一個線程中來處理與一個mysql客戶端程式的整個會話過程中的全 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...