• 使用T-SQL命令管理存取和角色權限 Manage Access and Roles with Transact-SQL (T-SQL) Commands

    SQL Server提供不同的命令來管理資料庫存取和角色.這裡概略的列出你可使用的命令.

    增加使用者到目前資料庫

    CREATE USER user_name

    [ { { FOR | FROM }

    { LOGIN login_name

    | CERTIFICATE certificate_name

    | ASYMMETRIC KEY asym_key_name

    }

    ]

    [ WITH DEFAULT_SCHEMA = schema_name ]

    更改使用者名稱或預設的結構描述

    ALTER USER user_name

    WITH < set_item > [ ,...n ]

    < set_item > ::=

    NAME = new_user_name

    | DEFAULT_SCHEMA = schema_name

    從資料庫移除使用者

    DROP USER user_name

    傳回伺服器角色成員

    sp_helpsrvrolemember [[@rolename =] 'role']

    管理資料庫標準角色

    CREATE ROLE role_name [ AUTHORIZATION owner_name ]
    ALTER ROLE role_name WITH NAME = new_name
    DROP ROLE role_name
    sp_helprole [[@rolename =] 'role']

    管理資料庫角色成員

    sp_addrolemember [@rolename =] 'role',
            [@membername =] 'security_account'
    sp_droprolemember [@rolename =] 'role',
            [@membername =] 'security_account'
    sp_helprolemember [[@rolename =] 'role']

    管理應用程式角色

    CREATE APPLICATION ROLE application_role_name
            WITH PASSWORD = 'password' [ , DEFAULT_SCHEMA = schema_name ]
     
    ALTER APPLICATION ROLE application_role_name
            WITH <set_item> [ ,...n ]
     
    <set_item> ::=
            NAME = new_application_role_name
            | PASSWORD = 'password'
            | DEFAULT_SCHEMA = schema_name
     
    DROP APPLICATION ROLE rolename

    來源出處: Microsoft Press book Microsoft SQL Server 2008 Administrator’s Pocket Consultant

  • 設定你的SQL SERVER 弱點分析 Configure Your SQL Server Attack Surface

    在保護完善的系統中執行安全演習,例如侵入系統竊取資料的利益遠大於侵入攻擊系統的難度.為了要防禦每一種攻擊系統的手法,依靠深度防禦可以在幾個地方帶給攻擊者一些困難.

    安裝你的執行個體期間,你可以指定幾個驗證選項模式是否可被存取.如果你限制執行個體只能透過Windows
    登入認證存取的話,那你可以避免掉大部分的攻擊方法,因為這可以確保任何使用者的連線都必須先經過Windows網域的認證才能存取該執行個體.

    安裝完後,你可以設定網路協定來允許遠端連線.如果沒有開啟遠端連線的話,攻擊者必須要先訪問並存取機器才可以登入你正在執行的執行個體.遠端連線和驗證模式的設定,通常都是你執行個體的第一道防線.

     

    SQL Server 每個功能都能啟動存取,但同樣的也提供一種方法讓攻擊者可以找到如何進入系統的方法.攻擊者大多使用外部介面或ad
    hoc 執行能力.當你安裝SQL Server 執行個體後,任何執行核心引擎的功能預設都是被停用的.

     

    你可以透過執行個體中的系統預存程序 sp_configure 執行各種功能的啟動或關閉.下列清單描述你的執行個體上,有那些選項是該被應用的.除非你真的特別需要某些功能,不然下列清單中的功能都是應該被停用的:

    Ad Hoc Distributed Queries

    允許使用者執行 OPENROWSET和OPENDATASOURCE.由於查詢文字中會包含密碼,暴露登入和密碼的攻擊.你如擬需要頻繁的存取遠端資料來源,你應該使用連結的伺服器.

    CLR Enabled

    啟用 Common Language Runtime(CLR) 就表示可以使用任何.NET語言編寫觸發程序,使用者定義函數和預存程序,如C#.NET去執行你的SQL Server 引擎.如果CLR被關閉,將無法執行CLR.

    Cross Database Ownership
    Chaining (CDOC)

    允許使用者不需要複查權限即可跨資料庫,只要擁有權鏈結沒有被停用.

     

    Database Mail

    啟用 Database Mail 功能.

    External Key Management

    允許核可外部密鑰管理(EKM)軟體來管理你的執行個體所使用的加密密鑰.

    Filestream Access Level

    在你的執行個體上啟用FILESTREAM功能.當你設定1時,你可以使用T-SQL來操作FILESTREAM資料.當你設定2時,你可以從你的應用程式直接使用Windows API和FILESTREAM資料有所互動.

    OLE Automation Procedures

    允許OLE automation 程序被執行.你可以使用更穩定更靈活的CLR
    程序來取代任何的OLE automation 程序,

    Remote Admin Connections

    啟用遠端專用管理員連接(DAC).如果遠端管理連接沒有啟用,你必須先連接到該機器的桌面後執行你的執行個體,然後才能建立DAC連接.

     

    SQL Mail XPs

    啟用SQL Mail 是為了向後相容.所有的SQL
    Mail 功能都將被 Database Mail取代.

     

    Xp_cmdshell

    啟用 xp_cmdshell,這樣就能執行作業系統(operating system)命令.

     

     

    來源出處: Microsoft Press book Microsoft SQL Server
    2008 Step by Step
    by Mike Hotek

  • SQL SERVER 2008記憶體動態自我調整 Work with Dynamically Configured Memory in SQL Server 2008

    SQL Server是依據工作負載和可用記憶體資源來動態調整記憶體使用量.

    整體記憶體使用量介於最小和最大伺服器記憶體設定之間,最小伺服器記憶體建議依據SQL Server使用基準來設定,但該記憶體並不會一開始就完全配置,主要是依據資料庫工作負載來配置記憶體,當已達到最小伺服器記憶體門檻,這門檻將變成基準值,且記憶體將不在釋放.

    動態調整記憶體請遵循以下步驟

    1.伺服器屬性視窗中選擇記憶體頁面

    clip_image001[16]

    2.分別設定最小伺服器記憶體和最大伺服器記憶體.建議最大伺服器記憶體設定值是針對獨立伺服器或接近全部記憶體(實體記憶體+虛擬記憶體).不過,如果你一台伺服器上執行多個SQL Server 執行個體的話,你必須好好考慮最大伺服器記憶體的設定值,因為所有執行個體將一起共用全部記憶體.

    3.選擇確定.

    你也可以使用系統預存程序 sp_configure 來改變最小和最大伺服器設定值.使用以下陳述序.

    T-SQL

    exec sp_configure "min server memory", <number of megabytes>
    exec sp_configure "max server memory", <number of megabytes>

    PowerShell

    Invoke-Sqlcmd -Query "exec sp_configure ‘min server memory’, <num mb>"

    Invoke-Sqlcmd -Query "exec sp_configure ‘max server memory’, <num mb>"

    附註

    在一台專門只有執行SQL Server的系統裡,你通常不需要動態設定最小和最大伺服器記憶體使用量.不過,你可能為了要執行順暢一點而設定最小伺服器記憶體為 8 MB(24 KB * 使用者數量),這裡的使用者數量是指該SQL Server平均同時連線���量.你也可能想要保留實體記憶體給SQL Server.關於SQL Server設定8 MB是為了處理其內部結構程式碼.額外記憶體使用如下:鎖定使用96 bytes,開啟資料庫使用2,880 bytes和開啟物件使用276 bytes,這些物件包含所有的資料表,檢視表,預存程序,延伸的預存程序,觸發器,規則,約束和預設.

    你可以透過使用SQLServer:Memory Manager 效能物件確認記憶體使用量的基準線.監控時選擇所有計數器,並使用報表檢視器(Report View)查看記憶體使用量.需特別注意Total Server Memory計數器.

    來源出處: Microsoft Press book Microsoft SQL Server 2008 Administrator’s Pocket Consultant, Second Edition by William R. Stanek.

  • 透過 SQL Server 挽救方法找出已刪除資料 Ways to Find out What Data Was Deleted by SQL Server Repair

    當發生問題時,有可能你別無選擇必須使用 DBCC CHECKDB並搭配 REPAIR_ALLOW_DATA_LOSS選項時,該選項可能會造成一些資料的遺失.這時你的任務將變成要找出有那些資料遺失,同時盡可能重建遺失資料或反映資料庫其他固定部分的遺失.

    執行修復之前,你必須先嘗試透過DBCC CHECKDB 檢查有那些頁面是損壞的.這樣你才知道有什麼樣的資料在上面.同時請注意以下錯誤訊息:

    Server: Msg 8928, Level 16, State 1, Line 2

    Object ID 645577338, index ID 0: Page (1:168582) could not be processed. See other errors for details.

    你可以嘗試使用 DBCC PAGE 去檢查 page(1:168582).這會讓你知道該頁面的損壞程度如何,你可能也會在頁面上看到某些紀錄,當頁面被修復釋放後,就可搞清楚遺失那些資料.

    修復執行完成後,你可能會清楚有那些資料已經被刪除了.但如果你對該資料庫沒有很熟悉的話,可以透過兩個方法來輔助:

    ●執行修復作業之前,請先把損壞的資料庫複製一個副本,然後比較修復前和修復成功後的資料庫,這樣你就可以知道少了那些資料.

    ●執行修復作業之前,可先啟動外顯交易(explicit transaction).這樣修復作業會形成內部交易.當修復完成後,你可以檢查資料庫修復了那些部分,但如果你要恢復修復作業,你也可以簡單輕鬆回滾(roll back)外顯交易(explicit transaction).

    修復完成後,你可能會查詢已修復的資料庫有那些資料已經被修復.例如,你會考慮查詢一個已修復成功的叢集索引並帶有識別欄位的分葉節點.並找出被刪除紀錄範圍的查詢可能如下:

    -- Start of the missing range is when a value does not have a plus-1 neighbor.
    SELECT MIN(salesID + 1) FROM DemoRestoreOrRepair.dbo.sales as A
    WHERE NOT EXISTS (
           SELECT salesID FROM DemoRestoreOrRepair.dbo.sales as B
           WHERE B.salesID = A.salesID + 1);
    GO
    -- End of the missing range is when a value does not have a minus-1 neighbor
    SELECT MAX(salesID - 1) FROM DemoRestoreOrRepair.dbo.sales as A
    WHERE NOT EXISTS (
           SELECT salesID FROM DemoRestoreOrRepair.dbo.sales as B
           WHERE B.salesID = A.salesID - 1);
    GO

    修復完成後,你至少應該要執行一次完整備份,並且實行主要原因分析,然後找出是什麼原因造成的損壞.

    來源出處: Microsoft Press, Microsoft SQL Server 2008 Internals (by Kalen Delaney, Paul S. Randal, Kimberly L. Tripp, Conor Cunningham, Adam Machanic, and Ben Nevarez).

  • 使用SQL Server PowerShell指令程式管理SQL Server 2008 Use New Cmdlets in SQL Server PowerShell to Mange SQL Server 2008

    SQL Server PowerShell 指令程式(cmdlets)不同於標準 Windows PowerShell,主要差別就是註冊崁入式管理單元是不同的, SQL Server 有額外特別的指令程式可以使用,但這些程式可能還不存在標準的PowerShell指令程式中.

    SQL Server PowerShell除了原有執行指令程式外還包含以下額外的指令程式:

    Convert-UrnToPath 將 SQL Server 管理物件統一資源名稱(URN)轉換為SQL Server 提供者路徑.URN會在SQL Server 物件階層中指定管理物件位置.如果Powershell不支援 URN 路徑字元,則會自動編碼處理.

    Decode-SQLName 將編碼過的SQL Server識別碼進行解碼並傳回未編碼的SQL Server 識別碼.

    Encode-SQLName 將SQL Server 識別碼和名稱路徑中的特殊字元進行編碼,並在PowerShell路徑中重新格式化.該指令程式字元編碼包含\:/%<>*?[]|.如果你不需要編碼這些字元的話,那你必須使用單引號(‘)字元來逸出他們.

    Invoke-PolicyEvaluation 評估SQL Server執行個體是否符合管理原則.依預設,該命令會遵守但不會強制遵守,如果要強制遵守的話,可以透過AdHocPolicyEvaluationMode 設定採取相關動作

    Invoke-SQLCmd 支援 sqlcmd 指令碼的執行或是包含 Transact-SQL 或 XQuery 命令.依預設,該指令程式不會設定任何sqlcmd預設變數或返回輸出訊息.(大多的sqlcmd 命令也不支援).

    整個指令程式和指令程式選項變更已經在新的SQL Server PowerShell版本釋出,你可以透過下面技術去發現新的指令程式並且確定該如何使用它們:

    ●檢視所有指令程式清單,請在shell 提示視窗中輸入 get-command

    取得指令程式詳細資訊,請輸入get-help CmdletName –detailed,

    CmdletName這裡是指你想要取得的指令程式名稱.

    ●取得關於SQL Server提供者詳細資訊,SQL Server提供者針對PowerShell提供SQL Server 功能,輸入get-help sqlserver | more.

    來源出處: Microsoft Press book Microsoft SQL Server 2008 Administrator’s Pocket Consultant