目前,針對SQL Server數(shù)據(jù)庫的應用級入侵已經(jīng)變得越來越肆無忌憚,像SQL注入、跨站點腳本攻擊和未經(jīng)授權(quán)的用戶訪問等。所有這些入侵都有可能繞過前臺安全系統(tǒng)并對數(shù)據(jù)庫系統(tǒng)攻擊。對于數(shù)據(jù)庫管理來說,保護數(shù)據(jù)不受內(nèi)部和外部侵害是一項重要的工作。SQL Server 正日益廣泛的使用于各部門內(nèi)外,作為數(shù)據(jù)庫系統(tǒng)管理員,需要深入的理解SQL Server的安全性控制策略,以實現(xiàn)管理安全性的目標。那么,如何確保SQL Server數(shù)據(jù)庫的安全性呢,我們可以從以下兩方面考慮。it培訓機構(gòu)
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),冀州企業(yè)網(wǎng)站建設(shè),冀州品牌網(wǎng)站建設(shè),網(wǎng)站定制,冀州網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,冀州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
首先、采取業(yè)界已存在的且比較成熟的數(shù)據(jù)庫審計解決方案來實現(xiàn)
實時記錄用戶對數(shù)據(jù)庫系統(tǒng)的所有操作(如:插入、刪除、更新、用戶自定義操作等),并還原SQL操作命令包括源IP地址、目的IP地址、訪問時間、用戶名、數(shù)據(jù)庫操作類型、數(shù)據(jù)庫表名、字段名等,如此,可實現(xiàn)對數(shù)據(jù)庫安全事件準確全程跟蹤定位。
實時檢查數(shù)據(jù)庫不安全配置、數(shù)據(jù)庫潛在弱點、數(shù)據(jù)庫用戶弱口令、數(shù)據(jù)庫軟件補丁層次、數(shù)據(jù)庫潛藏木馬等。
進行全方位的多層(應用層、中間層、數(shù)據(jù)庫層)的訪問審計,通過多層業(yè)務(wù)審計,實現(xiàn)數(shù)據(jù)操作原始訪問者的精確定位。
針對于數(shù)據(jù)庫的操作行為進行實時檢測,并預設(shè)置風險控制策略,結(jié)合對數(shù)據(jù)庫活動的實時監(jiān)控信息,進行特征檢測,任何嘗試性的攻擊操作都將被檢測到并進行阻斷或告警;并支持通過郵件、短信、SYSLOG、SNMP、屏幕等方式告警。
其次、制定相關(guān)的數(shù)據(jù)庫管理流程
不同的人員對數(shù)據(jù)庫的操作職責不一樣,所有人員對數(shù)據(jù)庫的操作均需要事前審批,對一些非常重要的操作需要二級以上審批。申請操作時,需明確在什么人,什么時間,因為何事,對哪個數(shù)據(jù)庫(或表),進行什么樣的操作,可能有什么樣的風險及采取的補救措施等。
數(shù)據(jù)庫數(shù)據(jù)的丟失以及數(shù)據(jù)庫被非法用戶的侵入使得數(shù)據(jù)庫管理員身心疲憊不堪,數(shù)據(jù)庫安全性問題對于數(shù)據(jù)庫管理員來說簡直就是噩夢。對于數(shù)據(jù)庫數(shù)據(jù)的安全問題。本文對圍繞數(shù)據(jù)庫的安全性問題提出了一些安全性策略,希望對數(shù)據(jù)庫管理員有所幫助。
兩種安全模式:
Windows 認證模式:用戶通過一個現(xiàn)成的Windows用戶帳號來連接服務(wù)器。當一個用戶試圖與一個服務(wù)器連接的時候,SQL Server將會認證用戶的Windows帳號的名稱和密碼。用戶不能同時進入網(wǎng)絡(luò)和SQL Server,只能進入其中的一個。這一方法也被稱為一個被依賴的連接。
混合模式:這一模式將Windows認證模式和SQL Server認證聯(lián)接在一起。用戶可以通過一個Windows用戶帳號進行連接,這正如Windows認證一樣。但是,你也可以在SQL Server中直接建立用戶帳號。每一個SQL Server帳號都存儲了一個用戶名和密碼。
我們建議在可能的情況下都使用Windows認證模式。然而,混合模式很可以使用,特別是在SQL Server 7.0(或更早版本)都可以使用。.對于早期的SQL Server版本,SQL Server認證存在一些缺點。Windows認證已經(jīng)集成了操作系統(tǒng)的安全系統(tǒng),這就提供了比SQL Server認證更多的安全特性,很容易的使用,效率更加高,安全性更加好。在設(shè)計開始的時候,你應該認真考慮選擇哪一種模式最為合適。
密碼
無論采用哪一些模式,你應該記住在SQL Server中為系統(tǒng)管理者(sa)設(shè)置一個密碼。當安裝SQL Server時,安裝程序會自動建立一個帶有SQL Server注冊名稱(sa)和一個空白密碼的管理用戶。如果你保持這些用戶設(shè)置原樣而使用混合安全模式,任何具備一點SQL Server基礎(chǔ)知識的用戶都可以很容易地進入到你的數(shù)據(jù)庫中并做任何他想要做的事情。如果你使用的是Windows認證模式,在理論上你無需為sa用戶設(shè)置一個密碼,因為SQL Server注冊不會接受這些的設(shè)置。但是設(shè)置是一個很良好的操作,尤其是當你被迫轉(zhuǎn)移到將來使用的混合模式的時候。
如果安全模式已經(jīng)啟動,注冊將成為關(guān)鍵。你必須使用正確的.方法來啟動程序,注冊也是同樣的,如果你不能正確地輸入用戶名和密碼,程序?qū)⒉荒苓B接到網(wǎng)絡(luò),同時也不能連接到SQL Server。
作為一個管理者,一旦你已經(jīng)啟動了程序,你就做好安全管理的準備??梢酝ㄟ^定義以下的特性而實現(xiàn):
用戶(帳號):一個SQL Serve安全帳號代表著一個唯一的用戶。一個用戶也只有一個Windows帳號或者一個SQL Server注冊,這與數(shù)據(jù)庫中的用戶帳號相統(tǒng)一。
組(帳號):每一個用戶都屬于一個或多個組,這由認證模式?jīng)Q定。每一個組都具有特定許可。作為一個組的成員,你將獲得所有組的許可。
對象所有權(quán):所有權(quán)屬于建立對象的用戶。所有者可以將訪問權(quán)限分配給用戶。如果你是一個視的所有者,你還可以決定哪些用戶可以通過視來查看數(shù)據(jù)。
許可:一個許可代表著具有執(zhí)行某些操作的權(quán)利,比如打開一個視或者更改一個存儲程序。SQL Server承認許可的三種狀態(tài):GRANT給你一個用戶訪問;REVOKE刪除訪問;DENY防止用戶訪問對象。
任務(wù):這是一個SQL Server安全帳號,可以將帳號的集合作為一個簡單的單元來處理。任務(wù)定義在特定數(shù)據(jù)庫中用戶可以做哪些和哪些不可以做。
設(shè)計過程應該用效地定義哪些地方需要進行安全設(shè)置和如何設(shè)置。在這一過程之前你應該從兩個方面考慮:
敏感數(shù)據(jù);
敏感數(shù)據(jù)包括所有可能的數(shù)據(jù),包括整個數(shù)據(jù)庫中的所有數(shù)據(jù),雖然這樣的安全級別很少存在。你的工作就是定義為敏感數(shù)據(jù)并進行保護。
你選擇的認證模式和建立的注冊將通過限制哪些用戶可以進入到數(shù)據(jù)庫而實施第一步安全步驟。
第二步就要列舉可以訪問數(shù)據(jù)庫的所有用戶,然后決定所有數(shù)據(jù)是否對所有的用戶都適用。通常,你需要對一些數(shù)據(jù)進行保護,比如工資或者其他私人數(shù)據(jù)。這就意味著只有特定的用戶可以訪問和查看數(shù)據(jù)。你還可以設(shè)置哪些用戶更改數(shù)據(jù)。
始終記住的一條規(guī)則是“最小權(quán)利”概念。如果有人在他的工作中不需要訪問數(shù)據(jù),那即不要給他訪問的權(quán)限。應該避免所有的用戶都具有sa用戶的訪問權(quán)限。
具體的建議
當進行安全設(shè)置的時候,經(jīng)驗也是一個很好的老師,但通常也會有適用于通用數(shù)據(jù)庫的設(shè)計準則
從開始就獲得數(shù)據(jù)庫和對象的所有權(quán)。當建立一個新的數(shù)據(jù)庫時,你將會成為數(shù)據(jù)庫的所有者,并能夠設(shè)置數(shù)據(jù)庫中所有發(fā)生一切。你可以以管理者的身份注冊數(shù)據(jù)庫。然而,對象的所有權(quán)屬于建立對象的用戶。雖然這可能造成所有權(quán)的轉(zhuǎn)移,但可以確定這些的注冊能夠被用于建立所有的對象。
理解所有權(quán)鏈。這一安全特性防止用戶建立自己的視而偷看一些敏感數(shù)據(jù)。例如,假設(shè)你建立一個從兩個表中集中的數(shù)據(jù)的視,如果你是這兩個表的所有者,當你允許其他用戶使用視的許可時,SQL Server不會檢查表的有關(guān)許可。
使用視和存儲程序以分配給用戶訪問數(shù)據(jù)的權(quán)利,而不是讓用戶編寫一些直接訪問表格的特別查詢語句。通過這種方式,你無需在表格中將訪問權(quán)利分配給用戶。視和存儲程序
也可以限制查看的數(shù)據(jù)。例如,如果你的雇員表格包含一些秘密的工資信息,你可以建立一個省略了工資欄的視。
如果用戶從特定程序中進入你的程序,你可以建立程序任務(wù)。一個程序任務(wù)就是分配到特定程序的用戶,并給予用戶的有關(guān)許可。使用程序任務(wù),用戶不能直接地認證數(shù)據(jù)庫,相反,他們先認證他們自己的程序,這就決定哪些程序任務(wù)與服務(wù)器相連接。
時刻注意程序補丁。不可否認的,程序補丁是一些訣竅的集合。程序的發(fā)布,更新等都會引入新的問題,使用程序補丁是防止外界干擾和保護數(shù)據(jù)的最好和最容易的方法??梢栽L問微軟主頁上的SQL Service Pack下載頁,查看當前最新的程序補丁。
與SQL SERVER安全控制相關(guān)的幾點說明
(一)幾個基本術(shù)語
身份驗證(Authentication)是指通過提交服務(wù)器評估的憑據(jù)以登錄到主體請求訪問的 SQL Server 的過程。身份驗證可以確定接受身份驗證的用戶或進程的標識。
用戶、賬戶、賬號、登錄名、[數(shù)據(jù)庫]用戶名
用戶是指能夠在SQL Server安全機制下,訪問數(shù)據(jù)庫對象中的數(shù)據(jù)的操作員或客戶。用戶若要訪問數(shù)據(jù)庫對象,必須獲得數(shù)據(jù)庫管理員(DBA)分配的賬號和密碼。從SQL Server管理系統(tǒng)的角度來看,用戶就是一組匹配的賬戶和密碼。
賬戶和賬號是一個概念的不同說法,在服務(wù)器中的賬戶又叫登錄名(Login Name),因此訪問服務(wù)器也稱為登錄服務(wù)器。服務(wù)器的登錄名可以映射到數(shù)據(jù)庫中成為[數(shù)據(jù)庫]用戶名(User Name)。一個登錄名可以映射多個數(shù)據(jù)庫用戶,而一個用戶只能映射一個登錄名。
連接或登錄SQL Server服務(wù)器時是用的登錄名而非用戶名登錄的,程序里面的連接字符串中的用戶名也是指登錄名。
通常用戶名與登錄名相同(不是強制相同,但為了一目了然通常都在創(chuàng)建用戶名時使用與登錄名相同的名字)。
提示:登錄名(Login Name)和用戶名(User Name)是兩個不同的概念:
登錄名:服務(wù)器方的一個實體,登錄名只能進入SQL Server服務(wù)器,但是不能讓用戶訪問服務(wù)器中的數(shù)據(jù)庫資源。
用戶名:一個或多個登錄對象在數(shù)據(jù)庫中的映射,可以對用戶對象進行授權(quán),以便為登錄對象提供對數(shù)據(jù)庫的訪問權(quán)限。
登錄名作用于它所在的服務(wù)器。每個登錄名的定義存放在master系統(tǒng)數(shù)據(jù)庫的syslogins表中。
用戶名作用于它所在的數(shù)據(jù)庫。用戶定義信息存放在每個數(shù)據(jù)庫的sysusers表中。用登錄名登錄到SQL Server后,在訪問操作各個數(shù)據(jù)庫時,SQL Server會自動查詢此數(shù)據(jù)庫中是否存在與此登錄名關(guān)聯(lián)的用戶名,若存在就使用此用戶的權(quán)限訪問此數(shù)據(jù)庫,若不存在就是用guest用戶訪問此數(shù)據(jù)庫(guest是一個特殊的用戶名,后面會講到)。
SQL身份驗證:適合于非windows平臺的用戶或Internet用戶,需要提供賬戶和密碼。
Windows身份驗證:適合于windows平臺用戶,利用Windows賬戶和windows集成驗證,不需要提供密碼。
用戶想要操作數(shù)據(jù)庫的某個對象(如某張表)需要過三關(guān):
第一關(guān):我們需要登錄到SQL Server系統(tǒng),即需要登錄賬戶;
第二關(guān):我們需要訪問某個數(shù)據(jù)庫,即需要該數(shù)據(jù)庫的用戶賬戶;
第三關(guān):我們需要訪問數(shù)據(jù)庫中的某個對象(如某張表),需要有該對象的權(quán)限。
主體(principal)是可被授予對安全資源的訪問權(quán)限的實體(例如登錄名、用戶、進程、組或角色)。主體可以是主體的集合(比如數(shù)據(jù)庫角色或Windows組)或不可分割的主體(比如本地登錄或域登錄)。每個主體都具有一個 ID (identification)和一個安全 ID (SID)。
⊙ Windows級別的主體:Windows組、Windows域登錄名、Windows本地登錄名。
⊙ SQL Server級的主體:服務(wù)器角色、SQLServer登錄名。
⊙數(shù)據(jù)庫級的主體:數(shù)據(jù)庫角色、數(shù)據(jù)庫用戶、應用程序角色。
上下文切換 (context switch),更改檢查執(zhí)行語句或執(zhí)行操作的權(quán)限時所依據(jù)的標識。
服務(wù)器(server)
1)指安裝了SQL SERVER的計算機。2)指SQL Server實例——計算機上運行的 SQLServer的副本。3)指為用戶提供服務(wù)的計算機軟件或組件。
需要根據(jù)上下文理解。
注冊服務(wù)器
注冊服務(wù)器使您可以存儲服務(wù)器連接信息(服務(wù)器的類型、服務(wù)器的名稱、登錄到服務(wù)器時使用的身份驗證的類型等),以供將來連接時使用——下次連接該服務(wù)器時,不需要重新輸入登錄信息。
SQLServer 2000在SQL Server企業(yè)管理器中注冊服務(wù)器,才能使用 SQL Server企業(yè)管理器來管理這些服務(wù)器。從SQLServer 2005始,在 SQL ServerManagement Studio 中注冊服務(wù)器,才能使用 SQL Server Management Studio 來管理這些服務(wù)器。
在 Microsoft SQL Server中,可以注冊以下類型的服務(wù)器:SQLServer數(shù)據(jù)庫引擎、Analysis Services、Reporting Services、IntegrationServices和 SQL Server Compact 3.5SP1。
(二)SQL Server實例(SQL Server instance)
SQLServer實例(SQL Server instance),簡稱實例 (instance),是計算機上運行的SQLServer 的副本。同一臺計算機上可以安裝運行的多個 SQLServer副本。每個SQL Server實例都包含數(shù)據(jù)庫引擎、Analysis Services和 ReportingServices的 SQL Server,每個SQL Server數(shù)據(jù)庫實例各有一套不為其他實例共享的系統(tǒng)及用戶數(shù)據(jù)庫。
數(shù)據(jù)庫引擎是用于存儲、處理和保護數(shù)據(jù)的核心服務(wù)。利用數(shù)據(jù)庫引擎可控制訪問權(quán)限并快速處理事務(wù)。
實例又分為“默認實例”(default instance)和“命名實例”(namedinstance),如果在一臺計算機上安裝第一個SQLSERVER,命名設(shè)置保持默認的話,那這個實例就是默認實例。默認實例與安裝計算機具有相同名稱。命名實例指安裝SQL Server時給定了名稱,可以安裝多個命名實例,給定名稱是為了與同一臺計算機上的其他命名實例和默認實例區(qū)分開。
SQLServer應用程序可以通過僅指定服務(wù)器名稱而連接到 SQLServer的默認實例。SQL Server應用程序在連接到服務(wù)器上的某個命名實例時必須既指定服務(wù)器名稱又指定實例名稱,計算機名稱\實例名稱。
一臺計算機上最多只有一個默認實例,也可以沒有默認實例,默認實例名與計算機名相同。如果要訪問本機上的默認SQL服務(wù)器實例,使用計算機名、(local)、localhost、127.0.0.1、.、本機IP地址,都可以達到相同的目的。但如果要訪問非本機的SQL服務(wù)器,那就必須使用計算機名稱\實例名稱。
默認實例和命名實例的區(qū)別:
1、服務(wù)中服務(wù)名稱的區(qū)別:
(1)默認實例:MSSQLSERVER。
(2)有名命名實例:實列名為benet,在服務(wù)中的名稱是MSSQL$BENET。
注:如果你有多個實例的時候會在服務(wù)中出現(xiàn)多個服務(wù)名稱。
2、連接到查詢分析器或探查器的時候區(qū)別:
(1)默認實例可以使用:“.”(點)、“(local)”、“計算機名稱”。
(2)實例名稱:計算機名pcname,實例名benet,連接時使用的名稱是pcname\benet。
(三)安全對象和權(quán)限
安全對象(Securable),可以通過權(quán)限得到保護的實體。是SQLServer數(shù)據(jù)庫引擎授權(quán)系統(tǒng)控制對其進行訪問的資源。如表、視圖、觸發(fā)器等。
SQLServer中將安全對象分為三個層次,分別為:
⊙服務(wù)器層級,包含的安全對象:端點、登錄、服務(wù)器角色、數(shù)據(jù)庫。
⊙數(shù)據(jù)庫層級,包含的安全對象:用戶、數(shù)據(jù)庫角色、應用程序角色、程序集、消息類型、路由、服務(wù)、遠程服務(wù)綁定、全文目錄、證書、非對稱密鑰、對稱密鑰、約定、架構(gòu)。
⊙構(gòu)架(SCHEMA)層級,包含的安全對象:類型、XML架構(gòu)集合、對象(函數(shù)、過程、同義詞、表、視圖)
這三個層級是從上到下包含的,級別從高到低。
說明:端點(endpoint)為服務(wù)器級安全對象。Microsoft SQL Server 2005 中的連接管理基于“端點”。一個端點就是一個SQL Server對象,它能夠使 SQL Server在網(wǎng)絡(luò)中通信。對于數(shù)據(jù)庫鏡像,服務(wù)器實例需要有自己專用的“數(shù)據(jù)庫鏡像端點”。此端點用途特殊,專門用于接收來自其他服務(wù)器實例的數(shù)據(jù)庫鏡像連接。
權(quán)限 (permission),與對象關(guān)聯(lián)的規(guī)則,用來規(guī)定哪些用戶可以獲得該對象的訪問權(quán)限以及方式如何。對安全對象的訪問通過授予或拒絕權(quán)限進行控制。
權(quán)限可以明確用戶能夠使用哪些數(shù)據(jù)庫對象,并對它們進行何種操作。用戶在數(shù)據(jù)庫內(nèi)的權(quán)限取決于用戶賬號的權(quán)限和該用戶所屬的角色的權(quán)限。
提示:在設(shè)置權(quán)限時,尤其要注意權(quán)限在安全對象上的繼承關(guān)系。對于高級別安全對象上設(shè)置的權(quán)限,會被自動繼承到低級別安全對象上。
理解權(quán)限的繼承和權(quán)限的覆蓋會在設(shè)置權(quán)限時減少很多問題,最佳方法是統(tǒng)籌規(guī)劃,上機驗證。
(四)架構(gòu)(schema)
架構(gòu)是指包含表、視圖、過程等的容器。它位于數(shù)據(jù)庫內(nèi)部,而數(shù)據(jù)庫位于服務(wù)器內(nèi)部。這些實體就像嵌套框放置在一起。服務(wù)器是最外面的框,而架構(gòu)是最里面的框。架構(gòu)包含表、視圖、過程、函數(shù)、同義詞、類型、隊列、XML架構(gòu)集合等安全對象。
注意:
在 SQL Server 2000和早期版本中,數(shù)據(jù)庫可以包含一個名為“架構(gòu)”的實體, SQL Server 2000包含 CREATE SCHEMA語句,但此實體實際上是所有者(創(chuàng)建對象時的用戶)。在 SQL Server 2005 開始,架構(gòu)既是一個容器,又是一個命名空間。任何用戶都可以擁有架構(gòu),并且架構(gòu)所有權(quán)可以轉(zhuǎn)移。從 SQL Server 2005開始,每個用戶都擁有一個默認架構(gòu)??梢允褂?CREATE USER或 ALTER USER的 DEFAULT_SCHEMA選項設(shè)置和更改默認架構(gòu)。如果未定義 DEFAULT_SCHEMA,則數(shù)據(jù)庫用戶將使用 dbo作為默認架構(gòu)。
在SQL Server 2000中,DataBaseName.dbo.TableName解釋為:數(shù)據(jù)庫名.所有者.表名。
從 SQL Server 2005開始,DataBaseName.dbo.TableName解釋為:數(shù)據(jù)庫名.架構(gòu)名.表名。
在SQL Server 2000中,數(shù)據(jù)庫對象全稱是server_name.[database_name].[owner_name].object_name
從SQL Server 2005始,數(shù)據(jù)庫對象全稱是server_name.[database_name].[schema_name].object_name
在SQL SERVER2000或以前版本中創(chuàng)建一個對象,對象必須要有一個所有者(owner)。對象是如何屬于某個所有者的呢?這依賴于創(chuàng)建對象時的用戶。您不能取消對象所有者(object owner)的特權(quán)(privileges)。對象所有者可以執(zhí)行任何與對象有關(guān)的操作(例如 INSERT、UPDATE、DELETE、SELECT或 EXECUTE),也可以管理對象的權(quán)限。
從2005/2008后,一個我們必須重新認識的情況是對象不再有所有者(owner)。架構(gòu)包含對象,架構(gòu)有所有者。
在2005前(如SQL Server 2000中),沒有架構(gòu)的概念,只有用戶的概念,那時候DBO是默認用戶。到了2005,有了架構(gòu)概念,但是為了向后兼容,保留了DBO,并且把DBO作為默認架構(gòu),在不指定架構(gòu)的情況下,默認為dbo,“默認架構(gòu)”的概念,用于解析未使用其完全限定名稱引用的對象的名稱。在 SQL Server 2005 中,每個用戶都有一個默認架構(gòu),用于指定服務(wù)器在解析對象的名稱時將要搜索的第一個架構(gòu)??梢允褂?CREATE USER和 ALTER USER的 DEFAULT_SCHEMA選項設(shè)置和更改默認架構(gòu)。如果未定義 DEFAULT_SCHEMA,則數(shù)據(jù)庫用戶將把 DBO作為其默認架構(gòu)。
(五)dbo
dbo既是默認架構(gòu),也是默認用戶。在SQL Server 2000中,dbo作為默認用戶。在SQL Server2005中,dbo既作為默認用戶,也作為默認架構(gòu)(如圖)。
dbo作為默認用戶,dbo (DataBase Owner,數(shù)據(jù)庫的所有者,擁有數(shù)據(jù)庫中的所有對象),每個數(shù)據(jù)庫都有dbo, sysadmin服務(wù)器角色的成員自動映射成dbo,無法刪除 dbo用戶,且此用戶始終出現(xiàn)在每個數(shù)據(jù)庫中。通常,登錄名sa映射為庫中的用戶dbo。另外,固定服務(wù)器角色 sysadmin的任何成員都映射到每個數(shù)據(jù)庫內(nèi)稱為 dbo的一個特殊用戶上。由固定服務(wù)器角色sysadmin的任何成員創(chuàng)建的任何對象都自動屬于 dbo。由固定服務(wù)器角色 sysadmin的任何成員或 dbo用戶創(chuàng)建的任何對象都自動屬于dbo,由任何其他用戶(包括 db_owner固定數(shù)據(jù)庫角色成員)創(chuàng)建的對象,屬于創(chuàng)建該對象的用戶,而不是 dbo,用創(chuàng)建該對象的用戶名限定。例如:
如果用戶 Andrew是固定服務(wù)器角色sysadmin的成員,并創(chuàng)建表 T1,則表 T1屬于 dbo,并以 dbo.T1而不是 Andrew.T1進行限定。相反,如果 Andrew不是固定服務(wù)器角色sysadmin的成員,而只是固定數(shù)據(jù)庫角色 db_owner的成員,并創(chuàng)建表 T1,則 T1屬于 Andrew,并限定為Andrew.T1。該表屬于 Andrew,因為該成員沒有將表限定為dbo.T1。
dbo作為默認架構(gòu),在不指定架構(gòu)的情況下,默認為dbo,“默認架構(gòu)”的概念,用于解析未使用其完全限定名稱引用的對象的名稱。在 SQL Server 2005 中,每個用戶都有一個默認架構(gòu),用于指定服務(wù)器在解析對象的名稱時將要搜索的第一個架構(gòu)??梢允褂?CREATE USER和 ALTER USER的 DEFAULT_SCHEMA選項設(shè)置和更改默認架構(gòu)。如果未定義 DEFAULT_SCHEMA,則數(shù)據(jù)庫用戶將把 DBO作為其默認架構(gòu)。
(六)Guest用戶
guest用戶不需要映射到登錄名。這種用戶賬號是供數(shù)據(jù)庫中沒有明確授予權(quán)限給已映射至認證用戶使用的。guest供那些已經(jīng)成功登錄到SQL SERVER實例,但是卻沒有通過用戶訪問數(shù)據(jù)庫的權(quán)限的登錄者使用的。
SQLSERVER 2000中g(shù)uest用戶可以刪除;而2005/2008中是不能刪除的,卻可以取消CONNECT權(quán)限,而且為安全起見,所有用戶定義的數(shù)據(jù)庫中缺省情況下guest用戶的權(quán)限都是被取消了的,可在除master和tempdb之外的任何數(shù)據(jù)庫中禁用Guest用戶。
在SQL SERVER 2000中,新建的數(shù)據(jù)庫中沒有Guest用戶,但可以添加它,也可刪除它,添加與刪除方法與普通數(shù)據(jù)庫相同。
在SQL Server 2005或以上版本中GUEST已經(jīng)默認存在于每個數(shù)據(jù)庫中,但默認情況下,會在新數(shù)據(jù)庫中禁用GUEST用戶(在“對象資源管理器→安全性→登錄”節(jié)點中圖標上有禁用標識),我們可以通過以下語句啟用GUEST用戶:GRANT CONNECT TO GUEST 。當你決定不再想讓該數(shù)據(jù)庫被非數(shù)據(jù)庫授權(quán)的用戶以GUEST身份進行訪問時,可以再次將GUEST帳號禁用。值得一提的是,GUEST用戶在數(shù)據(jù)庫中不能被刪除,我們只能通過以下語句禁用GUEST用戶:REVOKE CONNECT FROMGUEST 。
在SQL SERVER 2000中,要允許guest用戶帳戶訪問數(shù)據(jù)庫,可以像添加其它數(shù)據(jù)庫用戶那樣添加它,如:
USEDatabase Name
GO
EXECsp_grantdbaccess 'guest'
GO
在SQL SERVER 2005中,允許guest用戶帳戶
USEDatabase Name
GO
GRANT CONNECT TO GUEST
GO
需要提醒的是,對于是否添加Guest用戶要謹慎權(quán)衡利弊。
--SQLServer 2000刪除guest用戶賬號
USEDatabase Name
GO
EXECsp_revokedbaccess 'guest'
GO
-- SQLServer 2005禁用guest用戶賬號
USEDatabase Name
GO
REVOKECONNECT FROM GUEST
GO
(七)sa登錄名
SQLServer的 sa登錄名是服務(wù)器級的主體。默認情況下,該登錄名是在安裝實例時創(chuàng)建的。在 SQL Server 2005和 SQL Server2008中,sa的默認數(shù)據(jù)庫為 master。這是對早期版本的 SQLServer的行為的更改。
sa(system administrator系統(tǒng)管理員)是為向后兼容而提供的特殊登錄。sysadmin是一種角色。該角色能夠執(zhí)行SQLServer上的任何操作。本質(zhì)上,任何具有這種角色成員身份的人都是那個服務(wù)器上的sa。這種服務(wù)器角色的創(chuàng)建為微軟提供了某一天去除sa登錄的能力——實際上,聯(lián)機叢書把sa稱作本質(zhì)上為遺留物的東西。
與以前版本不同,SQL Server 2008,即使是用混合模式安裝,sa也默認禁用。
注意,sa是一個默認的SQL Server登錄名,擁有操作SQL Server系統(tǒng)的所有權(quán)限,該登錄名不能被刪除。當采用混合模式安裝Microsoft SQL Server系統(tǒng)之后,應該為sa指定一個密碼,應為 sa登錄分配一個強密碼(strongpassword)。
sa登錄名會映射到 sysadmin固定服務(wù)器角色,它對整個服務(wù)器有不能撤銷的管理憑據(jù)。如果攻擊者以系統(tǒng)管理員的身份獲取了訪問權(quán)限,則可能造成的危害是無法預計的。
(八)其它幾個默認配置的的登錄(Logins)和用戶(Users)
默認配置的的登錄和用戶除了dbo用戶、Guest用戶、sa登錄,還有如下幾個:
Administrators組是一個特殊的登錄。administrator用戶默認administrators組的成員。
Administrators組實際名稱為BUILTIN\Administrators。早期版本,這個組的所有成員均為 sysadmin 角色的成員(這意味著Administrators組中的成員具有最高權(quán)限),但可以從該角色中移除這些成員。與以前版本不同,SQL Server 2008默認情況下,本地 Windows組 BUILTIN\Administrators不再包含在新的 SQL Server 2008安裝上的 SQL Server的 sysadmin固定服務(wù)器角色中。
提示:每個版本的 SQL Server都具有不同的安全功能,默認配置也不盡相同,后出的版本更有利于安全,但安全性和使用方便這兩種需求可能有矛盾的一面,最佳方法是上機了解驗證。
NETWORKSERVICE和SYSTEM登錄賬戶
NETWORKSERVICE和SYSTEM登錄賬戶,實際名稱為NT AUTHORITY\NETWORK SERVICE和NT AUTHORITY\SYSTEM,是否存在這些,依賴于服務(wù)器的配置。如果配置了報表服務(wù)器,將出現(xiàn)NETWORK SERVICE登錄賬戶。
INFORMATION_SCHEMA和sys用戶
INFORMATION_SCHEMA和sys又是SQL Server 預定義的架構(gòu)(內(nèi)置架構(gòu))名稱,它們與INFORMATION_SCHEMA和sys用戶具有相同的名稱。不能刪除,主要用于向后兼容性??梢允褂肐NFORMATION_SCHEMA用戶和sys用戶訪問INFORMATION_SCHEMA和sys架構(gòu)的系統(tǒng)視圖,獲取有關(guān)數(shù)據(jù)庫元數(shù)據(jù)信息。
(九)SQL Server中的角色
角色 (role),是SQL Server用來管理服務(wù)器和數(shù)據(jù)庫權(quán)限的,是安全帳戶的集合,在管理權(quán)限時可以視為一個單元——作為分配權(quán)限的單位。
SQLServer中的角色分為服務(wù)器級別和數(shù)據(jù)庫級別角色。
◇服務(wù)器級別角色
服務(wù)器級別角色用于幫助管理服務(wù)器上的權(quán)限。服務(wù)器角色的權(quán)限作用域為服務(wù)器范圍。可以將登錄名(Login Name)添加到服務(wù)器角色。
符合權(quán)限要求的用戶,可以將服務(wù)器級主體(SQL Server登錄名、Windows帳戶和 Windows組)添加到服務(wù)器級角色。固定服務(wù)器角色的每個成員都可以將其他登錄名添加到該同一角色。
固定服務(wù)器角色簡介:
1)sysadmin:系統(tǒng)管理員,角色成員可對SQLServer服務(wù)器進行所有的管理工作,為最高管理角色。這個角色一般適合于數(shù)據(jù)庫管理員(DBA)。
2)securityadmin:安全管理員,角色成員可以管理登錄名及其屬性??梢允谟?、拒絕、撤銷服務(wù)器級和數(shù)據(jù)庫級的權(quán)限。另外還可以重置SQL Server登錄名的密碼。
3)serveradmin:服務(wù)器管理員,角色成員具有對服務(wù)器進行設(shè)置及關(guān)閉服務(wù)器的權(quán)限。
4)setupadmin:設(shè)置管理員,角色成員可以添加和刪除鏈接服務(wù)器,并執(zhí)行某些系統(tǒng)存儲過程。
5)processadmin:進程管理員,角色成員可以終止SQLServer實例中運行的進程。
6)diskadmin:用于管理磁盤文件。
7)dbcreator:數(shù)據(jù)庫創(chuàng)建者,角色成員可以創(chuàng)建、更改、刪除或還原任何數(shù)據(jù)庫。
8)bulkadmin:可執(zhí)行BULK INSERT語句,但是這些成員對要插入數(shù)據(jù)的表必須有INSERT權(quán)限。BULK INSERT語句的功能是以用戶指定的格式復制一個數(shù)據(jù)文件至數(shù)據(jù)庫表或視圖。
9)在sql server 2005 sp2(補?。┘耙院蟀姹荆?wù)器角色中還可以看到一個public角色。每個 SQL Server登錄名均屬于 public服務(wù)器角色。 如果未向某個服務(wù)器主體授予或拒絕對某個安全對象的特定權(quán)限,該用戶將繼承授予該對象的 public角色的權(quán)限。public服務(wù)器角色默認擁有 VIEW ANY DATABASE(查看任何數(shù)據(jù)庫)權(quán)限。[VIEW ANY DATABASE權(quán)限控制是否顯示sys.databases和 sys.sysdatabases視圖以及 sp_helpdb系統(tǒng)存儲過程中的元數(shù)據(jù)(metadata)。]
從 SQL Server 2012開始,您可以創(chuàng)建用戶定義的服務(wù)器角色,并將服務(wù)器級權(quán)限添加到用戶定義的服務(wù)器角色。
每個版本的 SQL Server都具有不同的安全功能,版本越高,功能越強。
可以利用系統(tǒng)函數(shù)IS_SRVROLEMEMBER指示當前用戶的 SQLServer登錄名是否是固定服務(wù)器角色的成員。
可以利用系統(tǒng)存儲過程sp_helpsrvrolemember返回有關(guān) SQL Server 固定服務(wù)器角色成員的信息。
--查詢 sysadmin固定服務(wù)器角色的成員。
execsp_helpsrvrolemember 'sysadmin'
◇數(shù)據(jù)庫級別的角色
數(shù)據(jù)庫級別角色用于幫助管理數(shù)據(jù)庫中的權(quán)限。數(shù)據(jù)庫級角色的權(quán)限作用域為數(shù)據(jù)庫范圍??梢詫數(shù)據(jù)庫]用戶名(User Name)添加到數(shù)據(jù)庫角色。
SQLServer中有兩種類型的數(shù)據(jù)庫級角色:數(shù)據(jù)庫中預定義的“固定數(shù)據(jù)庫角色”和您可以創(chuàng)建的“靈活數(shù)據(jù)庫角色”(自定義數(shù)據(jù)庫角色)。
固定數(shù)據(jù)庫角色是在數(shù)據(jù)庫級別定義的,并且存在于每個數(shù)據(jù)庫中。 db_owner和db_securityadmin數(shù)據(jù)庫角色的成員可以管理固定數(shù)據(jù)庫角色成員身份。但是,只有db_owner數(shù)據(jù)庫角色的成員能夠向db_owner固定數(shù)據(jù)庫角色中添加成員。 msdb數(shù)據(jù)庫中還有一些特殊用途的固定數(shù)據(jù)庫角色。
符合權(quán)限要求的用戶,可以向數(shù)據(jù)庫級角色中添加數(shù)據(jù)庫帳戶和其他 SQL Server角色。固定數(shù)據(jù)庫角色的每個成員都可向同一個角色添加其他登錄名。
固定數(shù)據(jù)庫角色簡介:
1)db_owner:數(shù)據(jù)庫所有者,這個數(shù)據(jù)庫角色的成員可執(zhí)行數(shù)據(jù)庫的所有管理操作。
2)db_accessadmin:數(shù)據(jù)庫訪問權(quán)限管理者,角色成員具有添加、刪除數(shù)據(jù)庫使用者、數(shù)據(jù)庫角色和組的權(quán)限。
3)db_securityadmin:數(shù)據(jù)庫安全管理員,角色成員可管理數(shù)據(jù)庫中的權(quán)限,如設(shè)置數(shù)據(jù)庫表的增加、刪除、修改和查詢等存取權(quán)限。
4)db_ddladmin:數(shù)據(jù)庫DDL管理員,角色成員可增加、修改或刪除數(shù)據(jù)庫中的對象。
5)db_backupoperator:數(shù)據(jù)庫備份操作員,角色成員具有執(zhí)行數(shù)據(jù)庫備份的權(quán)限。
6)db_datareader:數(shù)據(jù)庫數(shù)據(jù)讀取者,角色成員可以從所有用戶表中讀取數(shù)據(jù)。
7)db_datawriter:數(shù)據(jù)庫數(shù)據(jù)寫入者,角色成員具有對所有用戶表進行增加、刪除、修改的權(quán)限。
8)db_denydatareader:數(shù)據(jù)庫拒絕數(shù)據(jù)讀取者,角色成員不能讀取數(shù)據(jù)庫中任何表的內(nèi)容。
9)db_denydatawriter:數(shù)據(jù)庫拒絕數(shù)據(jù)寫入者,角色成員不能對任何表進行增加、刪修、修改操作。
10)public:是一個特殊的數(shù)據(jù)庫角色,每個數(shù)據(jù)庫用戶都是public角色的成員,因此不能將用戶、組或角色指派為public角色的成員,也不能刪除public角色的成員。public數(shù)據(jù)庫角色默認的權(quán)限很少[使用某些系統(tǒng)過程查看并顯示master數(shù)據(jù)庫中的信息;執(zhí)行一些不需要一些權(quán)限的語句(例如PRINT)]。
可以利用系統(tǒng)函數(shù)IS_MEMBER檢查當前用戶是否是數(shù)據(jù)庫角色或Windows域組的成員。
可以利用系統(tǒng)存儲過程sp_helprolemember顯示數(shù)據(jù)庫角色的成員。
可以利用系統(tǒng)存儲過程sp_helpuser報告有關(guān)當前數(shù)據(jù)庫中數(shù)據(jù)庫級主體的信息。
可以利用系統(tǒng)存儲過程sp_helprotect報告當前數(shù)據(jù)庫中某對象的用戶權(quán)限或語句權(quán)限的信息。
--查詢用戶擁有的數(shù)據(jù)庫角色
useyourdb
execsp_helpuser 'UserName'
go
--查詢用戶被賦予的權(quán)限
useyourdb
execsp_helprotect @username = 'user name'
一、基本安全設(shè)定:
(1)文件系統(tǒng)的設(shè)定 windows2000server 支持多種文件系統(tǒng),最安全的要數(shù)NTFS文件系統(tǒng),如果你的windows2000server要用作服務(wù)器,最好將所有的分區(qū)都格式化為NTFS文件系統(tǒng),fat32是不能用的。
(2)補?。╬ack) 目前windows2000已經(jīng)到sp4了,這個大補丁一定要裝的,安裝sp4后再到網(wǎng)絡(luò)上升級,將微軟提供的各種重要系統(tǒng)安全更新全部都升級,不要怕麻煩,這是防病毒和黑客攻擊的非常重要安全設(shè)置步驟。
(3)帳號安全帳號是windows2000server的重要的安全保證,要注意區(qū)分一些工作組的權(quán)限: administrators是系統(tǒng)管理員組,administrator是系統(tǒng)默認的管理帳號,administrator最好設(shè)置一個復雜的密碼,復雜到什么程度呢?簡單的說,自己都要記不住這個密碼,這個密碼可以是字符、數(shù)字、符號、大小寫的組合(如:AGgF!452KhtUN),密碼不要讓別人猜得到,不要用自己得電話號碼啦之類的東西,最好在筆記本上將密碼設(shè)定好后再設(shè)置,設(shè)好密碼后妥善保管記錄密碼的筆記本,每隔一段時間更改自己的密碼 guest帳號最好禁止使用,如果沒有必要,不要添加其他的系統(tǒng)管理員帳號。
(4)關(guān)閉不必要的服務(wù)在服務(wù)中將一些不常用的服務(wù)關(guān)閉(比如打印、遠程注冊表操作,信息發(fā)送等不必要的服務(wù))。
(5)網(wǎng)絡(luò)協(xié)議如果沒有其他的用途,windows2000server只需要安裝tcp/ip協(xié)議,其他不必要的協(xié)議統(tǒng)統(tǒng)刪除。(6)如果沒必要,IIS一定不要安裝(如果需要安裝iis,那么看后面的設(shè)置) IIS是windows2000server中最不安全的組件,不裝IIS,windows2000將是很安全的。
(7)默認共享的刪除 windows2000server默認的共享有以下幾種 c$ d$ e$ ..... IPC$ ADMIN$ 這些默認共享一定要關(guān),否者hk利用簡單的Net use命令就可以將你的服務(wù)器黑掉下面提供簡單的關(guān)閉這些共享的方法 A、建立一個批處理文件,如a.bat B、在該批處理文件中添加下面的語句 net share c$ /del (這是取消c盤的默認共享,同理 net share d$ /del 是取消d盤的共享,你有多少個盤符,就編多少個以上的語句) net share ipc$/del (刪除ipc默認共享) net share admin$ /del (刪除 admin默認共享) C 、將以上的語句添加完后,將該文件放入開始菜單中程序中啟動文件夾中,讓windows2000server每次啟動都將默認的共享刪除(7)CMD的設(shè)置 cmd.exe是windows2000中非常重要的文件,很多漏洞都是要*調(diào)用該個文件,該文件在windows2000server所在目錄的system32中,我們需要對其進行設(shè)定 A、將該文件從system32中拷貝出來放在其他地方,將原來的文件刪除 B、將拷貝出來的文件進行權(quán)限設(shè)定,只允許administrator訪問,不允許其他任何的工作組或用戶訪問該文件。
(8)windows2000server終端服務(wù)(默認3389端口) windows2000server提供了遠程終端服務(wù),此服務(wù)方便了網(wǎng)絡(luò)管理員對服務(wù)器的遠程管理,但是,該服務(wù)也為黑客提供了非常危險的攻擊,網(wǎng)絡(luò)黑客口中的所謂跳板(肉雞)絕大部分都是利用該功能進行自我隱蔽的攻擊。一旦系統(tǒng)管理員的密碼被破解,而該服務(wù)器又提供終端服務(wù),黑客就可以完全控制了該服務(wù)器,不但服務(wù)器的各種資料會完全暴露,而且黑客還會利用這臺服務(wù)器去攻擊其他的服務(wù)器,因此該服務(wù)除非你覺得自己的服務(wù)器足夠安全,否則最好不要打開,特別是暴露在互連網(wǎng)絡(luò)中的服務(wù)器,打開該功能一定要小心謹慎。 A、如何知道自己的終端服務(wù)是否打開?終端服務(wù)需要安裝,我們可以通過控制面板中的添加/刪除程序中的添加/刪除windows組件來安裝,在windows組件向?qū)Я斜碇凶钕旅嬗袃蓚€組件,一個是“終端服務(wù)”,一個是“終端服務(wù)授權(quán)”,我們只需要安裝“終端服務(wù)”這個組件就可以將該功能啟用,一旦啟用了該功能,默認的情況下,我們的tcp3389端口就會打開。所以,我們看看這個地方,如果你的組件“終端服務(wù)”前面打了勾,就表明你已經(jīng)打開了該服務(wù)。有些黑客手段很高明,一旦控制了你的計算機后,可以遠程打開該服務(wù),這種情況下,我們最好檢查windows2000server啟用了哪些服務(wù),如何檢查呢?打開windows2000server的服務(wù)管理(開始菜單——程序——管理工具——服務(wù))。在服務(wù)列表中檢查Terminal Services這項服務(wù)的狀態(tài),看看如果該服務(wù)處于“ 禁用”狀態(tài),說明該服務(wù)沒打開,如果該服務(wù)處于“已啟動”狀態(tài),說明該服務(wù)已經(jīng)打開。 B、如何關(guān)閉該服務(wù)!第一步,通過控制面板中的添加/刪除程序中的添加/刪除windows組件來將該服務(wù)組件刪除第二步,在服務(wù)中將Terminal Services服務(wù)禁用注意:需要經(jīng)常檢查該服務(wù)是否被非法啟動,如果你在你沒有啟動該服務(wù)的情況下你發(fā)現(xiàn)它已打開,非常不幸,你的服務(wù)器已經(jīng)被黑,成為了別人的跳板(肉雞)最好的解決方法是重作服務(wù)器系統(tǒng),不要以為關(guān)閉該服務(wù)就行了。
(9)telnet服務(wù)(默認23端口)相對于3389來講,telnet服務(wù)更不容易引起管理員的注意,該服務(wù)以前是UNIX和Linux類系統(tǒng)提供的遠程管理終端服務(wù),windows2000server也提供了,它也是一個終端服務(wù),只不過telnet服務(wù)是字符界面,而3389服務(wù)是圖形界面,二者都能完全遠程控制服務(wù)器的所有功能。我以前在利用肉雞的時候,一般都不用3389,為什么呢?該服務(wù)速度慢,我一般都是打開肉雞的telnet服務(wù),速度非???,功能也很全面,又不容易被發(fā)覺 A、如何知道自己的telnet服務(wù)是否打開?在windows2000server控制面板——管理工具中有一項“Telnet 服務(wù)器管理”(對應的文件是system32中的tlntadmn.exe),這就是該服務(wù)的開關(guān),我們可以利用該程序配置我們的telnet服務(wù)。打開開始菜單——程序——管理工具——服務(wù),在服務(wù)列表中有該服務(wù)對應的一項“Telnet”,默認的情況下,該服務(wù)狀態(tài)是“手動”,如果,該服務(wù)是“已啟動”狀態(tài),說明該服務(wù)已經(jīng)啟動了,你可以用以下命令連接在windows(98/2000/xp/2003)字符模式下輸入: telnet 服務(wù)器的IP地址如果出現(xiàn)了登陸界面,非常不幸,你的telnet服務(wù)真的已開,如果不是你開的,非常不幸,你被黑了,你可能成為了肉雞。 B、如何關(guān)閉該服務(wù)!打開開始菜單——程序——管理工具——服務(wù),在服務(wù)中將telnet服務(wù)禁用建議:最好將system32中的tlntadmn.exe拷貝出來放到其他文件夾中并改名,并將該文件從system32中刪除。隨時檢查telnet服務(wù)的狀態(tài),如果該服務(wù)是“已啟動”狀態(tài),而又不是你啟動的,最好重新安裝服務(wù)器系統(tǒng)。最好隨時掃描你的服務(wù)器所開的端口,如果23端口已開或有一些不知名的端口已開(因為黑客很可能會將提供該服務(wù)的端口改為其他的端口來逃避檢查),用telnet命令測試一下,看看能不能連接。附:telnet命令格式 telnet ip地址端口如:telnet 192.168.1.1 (連接服務(wù)器192.168.1.1的默認23端口)如:telnet 192.168.1.1555 (連接服務(wù)器192.168.1.1的555端口) SQL Server 2000的安全配置在進行SQL Server 2000數(shù)據(jù)庫的安全配置之前,首先你必須對操作系統(tǒng)進行安全配置,保證你的操作系統(tǒng)處于安全狀態(tài)。然后對你要使用的操作數(shù)據(jù)庫軟件(程序)進行必要的安全審核,比如對ASP、PHP等腳本,這是很多基于數(shù)據(jù)庫的WEB應用常出現(xiàn)的安全隱患,對于腳本主要是一個過濾問題,需要過濾一些類似 , ‘ @ / 等字符,防止破壞者構(gòu)造惡意的SQL語句。接著,安裝SQL Server2000后請打上補丁sp1以及最新的sp2。 1、使用安全的密碼策略我們把密碼策略擺在所有安全配置的第一步,請注意,很多數(shù)據(jù)庫帳號的密碼過于簡單,這跟系統(tǒng)密碼過于簡單是一個道理。對于sa更應該注意,同時不要讓sa帳號的密碼寫于應用程序或者腳本中。健壯的密碼是安全的第一步!SQL Server2000安裝的時候,如果是使用混合模式,那么就需要輸入sa的密碼,除非你確認必須使用空密碼。這比以前的版本有所改進。同時養(yǎng)成定期修改密碼的好習慣。數(shù)據(jù)庫管理員應該定期查看是否有不符合密碼要求的帳號。比如使用下面的SQL語句:Use master Select name,Password from syslogins wherepassword is null
2、使用安全帳號策略:由于SQL Server不能更改sa用戶名稱,也不能刪除這個超級用戶,所以,我們必須對這個帳號進行最強的保護,當然,包括使用一個非常強壯的密碼,最好不要在數(shù)據(jù)庫應用中使用sa帳號,只有當沒有其它方法登錄到 SQL Server 實例(例如,當其它系統(tǒng)管理員不可用或忘記了密碼)時才使用 sa。建議數(shù)據(jù)庫管理員新建立個擁有與sa一樣權(quán)限的超級用戶來管理數(shù)據(jù)庫。安全的帳號策略還包括不要讓管理員權(quán)限的帳號泛濫。SQL Server的認證模式有Windows身份認證和混合身份認證兩種。如果數(shù)據(jù)庫管理員不希望操作系統(tǒng)管理員來通過操作系統(tǒng)登陸來接觸數(shù)據(jù)庫的話,可以在帳號管理中把系統(tǒng)帳號“BUILTIN\Administrators”刪除。不過這樣做的結(jié)果是一旦sa帳號忘記密碼的話,就沒有辦法來恢復了。很多主機使用數(shù)據(jù)庫應用只是用來做查詢、修改等簡單功能的,請根據(jù)實際需要分配帳號,并賦予僅僅能夠滿足應用要求和需要的權(quán)限。比如,只要查詢功能的,那么就使用一個簡單的public帳號能夠select就可以了。
3、加強數(shù)據(jù)庫日志記錄:審核數(shù)據(jù)庫登錄事件的“失敗和成功”,在實例屬性中選擇“安全性”,將其中的審核級別選定為全部,這樣在數(shù)據(jù)庫系統(tǒng)和操作系統(tǒng)日志里面,就詳細記錄了所有帳號的登錄事件。請定期查看SQL Server日志檢查是否有可疑的登錄事件發(fā)生,或者使用DOS命令。findstr /C:"登錄" d:\Microsoft SQL Server\MSSQL\LOG\*.*
4、管理擴展存儲過程:對存儲過程進行大手術(shù),并且對帳號調(diào)用擴展存儲過程的權(quán)限要慎重。其實在多數(shù)應用中根本用不到多少系統(tǒng)的存儲過程,而SQL Server的這么多系統(tǒng)存儲過程只是用來適應廣大用戶需求的,所以請刪除不必要的存儲過程,因為有些系統(tǒng)的存儲過程能很容易地被人利用起來提升權(quán)限或進行破壞。如果你不需要擴展存儲過程xp_cmdshell請把它去掉。使用這個SQL語句:use master sp_dropextendedproc xp_cmdshellxp_cmdshell是進入操作系統(tǒng)的最佳捷徑,是數(shù)據(jù)庫留給操作系統(tǒng)的一個大后門。如果你需要這個存儲過程,請用這個語句也可以恢復過來。sp_addextendedproc xp_cmdshell, xpsql70.dll 如果你不需要請丟棄OLE自動存儲過程(會造成管理器中的某些特征不能使用),這些過程包括如下:Sp_OACreateSp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty Sp_OAMethod Sp_OASetProperty Sp_OAStop 去掉不需要的注冊表訪問的存儲過程,注冊表存儲過程甚至能夠讀出操作系統(tǒng)管理員的密碼來,如下:Xp_regaddmultistring Xp_regdeletekeyXp_regdeletevalue Xp_regenumvaluesXp_regread Xp_regremovemultistring Xp_regwrite 還有一些其他的擴展存儲過程,你也最好檢查檢查。在處理存儲過程的時候,請確認一下,避免造成對數(shù)據(jù)庫或應用程序的傷害。
5、使用協(xié)議加密:SQL Server 2000使用的Tabular Data Stream協(xié)議來進行網(wǎng)絡(luò)數(shù)據(jù)交換,如果不加密的話,所有的網(wǎng)絡(luò)傳輸都是明文的,包括密碼、數(shù)據(jù)庫內(nèi)容等等,這是一個很大的安全威脅。能被人在網(wǎng)絡(luò)中截獲到他們需要的東西,包括數(shù)據(jù)庫帳號和密碼。所以,在條件容許情況下,最好使用SSL來加密協(xié)議,當然,你需要一個證書來支持。
6、不要讓人隨便探測到你的TCP/IP端口:默認情況下,SQL Server使用1433端口監(jiān)聽,很多人都說SQL Server配置的時候要把這個端口改變,這樣別人就不能很容易地知道使用的什么端口了??上Вㄟ^微軟未公開的1434端口的UDP探測可以很容易知道SQL Server使用的什么TCP/IP端口了。不過微軟還是考慮到了這個問題,畢竟公開而且開放的端口會引起不必要的麻煩。在實例屬性中選擇TCP/IP協(xié)議的屬性。選擇隱藏 SQL Server 實例。如果隱藏了 SQL Server 實例,則將禁止對試圖枚舉網(wǎng)絡(luò)上現(xiàn)有的 SQL Server 實例的客戶端所發(fā)出的廣播作出響應。這樣,別人就不能用1434來探測你的TCP/IP端口了(除非用Port Scan)。
7、修改TCP/IP使用的端口:請在上一步配置的基礎(chǔ)上,更改原默認的1433端口。在實例屬性中選擇網(wǎng)絡(luò)配置中的TCP/IP協(xié)議的屬性,將TCP/IP使用的默認端口變?yōu)槠渌丝? 9、拒絕來自1434端口的探測由于1434端口探測沒有限制,能夠被別人探測到一些數(shù)據(jù)庫信息,而且還可能遭到DOS攻擊讓數(shù)據(jù)庫服務(wù)器的CPU負荷增大,所以對Windows 2000操作系統(tǒng)來說,在IPSec過濾拒絕掉1434端口的UDP通訊,可以盡可能地隱藏你的SQL Server。10、對網(wǎng)絡(luò)連接進行IP限制SQL Server 2000數(shù)據(jù)庫系統(tǒng)本身沒有提供網(wǎng)絡(luò)連接的安全解決辦法,但是Windows 2000提供了這樣的安全機制。使用操作系統(tǒng)自己的IPSec可以實現(xiàn)IP數(shù)據(jù)包的安全性。請對IP連接進行限制,只保證自己的IP能夠訪問,也拒絕其他IP進行的端口連接,把來自網(wǎng)絡(luò)上的安全威脅進行有效的控制。關(guān)于IPSec的使用請參看: 上面主要介紹的一些SQL Server的安全配置,經(jīng)過以上的配置,可以讓SQL Server本身具備足夠的安全防范能力。當然,更主要的還是要加強內(nèi)部的安全控制和管理員的安全培訓,而且安全性問題是一個長期的解決過程,還需要以后進行更多的安全維護一、概述在應用系統(tǒng)中,數(shù)據(jù)庫往往是最核心的部分,一旦數(shù)據(jù)庫毀壞或損壞,將會帶來巨大的損失,所以數(shù)據(jù)庫的管理越來越重要。我們在做數(shù)據(jù)庫管理與維護工作中,不可避免會出現(xiàn)各種各樣的錯誤,本文針對數(shù)據(jù)庫的日志文件丟失時如何利用MDF文件恢復數(shù)據(jù)庫的方法進行了研究。二、數(shù)據(jù)庫的恢復當數(shù)據(jù)庫的主數(shù)據(jù)MDF文件完好無損時,在丟失了LDF文件的情況下,如何利用MDF文件恢復數(shù)據(jù)庫?我們把SQL Server的日志文件分為兩類:一類是無活動事務(wù)的日志,另一類是含活動事務(wù)的日志,根據(jù)不同的日志,采取不同的方法來恢復數(shù)據(jù)庫?!?/p>
1. 無活動事務(wù)的日志恢復:無活動事務(wù)的日志丟失時,我們很容易利用MDF文件直接恢復數(shù)據(jù)庫,具體方法如下:
①.分離被質(zhì)疑的數(shù)據(jù)庫,可用企業(yè)管理器中的"分離數(shù)據(jù)庫工具",或者用存儲過程sp_detach_db分離數(shù)據(jù)庫;②利用MDF文件附加數(shù)據(jù)庫生成新的日志文件,可用企業(yè)管理器中的"附加數(shù)據(jù)庫"的工具,或者用存儲過程sp_attach_single_file_db附加數(shù)據(jù)庫。如果數(shù)據(jù)庫的日志文件中含有活動事務(wù),利用此方法就不能恢復數(shù)據(jù)庫。
2. 含活動事務(wù)的日志恢復:含有活動事務(wù)的日志丟失時,利用上述方法就會出現(xiàn)"數(shù)據(jù)庫和日志文件不符合,不能附加數(shù)據(jù)庫"。對于這種情況下,我們采用如下方法:
①新建同名數(shù)據(jù)庫AAA,并設(shè)它為緊急模式?停止SQL Server服務(wù)器;?把數(shù)據(jù)庫主數(shù)據(jù)MDF文件移走;?啟SQL Server服務(wù)器,新建一個同名的數(shù)據(jù)庫AAA;?停止SQL Server服務(wù)器,把移走的MDF文件再覆蓋回來;?啟動SQL Server服務(wù)器,把AAA設(shè)為緊急模式,不過默認情況下,系統(tǒng)表是不能隨便修改的,必須首先設(shè)置一下使其能被修改,運行以下語句即可: Use Master Gosp_configure ’allow updates’,1 reconfigure with override Go 接著運行以下語句,把AAA數(shù)據(jù)庫設(shè)為緊急模式,即把Sysdatabases表中AAA數(shù)據(jù)庫的status屬性設(shè)為’37268’,就表示把AAA數(shù)據(jù)庫處于緊急模式。 updatesysdatabases set status=32768 where hame=’AAA’如果沒有報告什么錯誤,就可以進行以下操作。
②設(shè)置數(shù)據(jù)庫AAA為單用戶模式,并檢查數(shù)據(jù)庫?重啟SQL Server服務(wù)器;?把數(shù)據(jù)庫AAA設(shè)為單用戶模式Sp_dboption ’AAA’, ’single user’, ’true’ ?運行以下語句,檢查數(shù)據(jù)庫AAA DBCCCHECKDB(’AAA’) 如果沒有什么大的問題就可以把數(shù)據(jù)庫的狀態(tài)改回去。
③還原數(shù)據(jù)庫的狀態(tài)運行以下語句,就可以把數(shù)據(jù)庫的狀態(tài)還原: update sysdatabases set status=28 wherename=’AAA’ sp_configure ’allow updates’,0 reconfigure with override Go 如果沒有什么大的問題,刷新一下數(shù)據(jù)庫,數(shù)據(jù)庫AAA又會出現(xiàn)在你面前,但目前恢復工作還沒有做完,此時的數(shù)據(jù)庫仍不能工作,還要進行下面的處理,才能真正恢復。④利用DTS的導入導出向?qū)В褦?shù)據(jù)庫AAA導入到一個新建數(shù)據(jù)庫BBB中?新建一個數(shù)據(jù)庫BBB; ?右擊BBB,選擇IMPORT功能,打開導入向?qū)В?目標源選擇"在SQL Server數(shù)據(jù)庫之間復制對象和數(shù)據(jù)庫",這樣可以把表結(jié)構(gòu),數(shù)據(jù)