<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      理解SQL Server中的權限體系(上)----主體

      簡介

          權限兩個字,一個權力,一個限制。在軟件領域通俗的解釋就是哪些人可以對哪些資源哪些操作。在SQL Server中,”哪些人”,“哪些資源”,”哪些操作”則分別對應SQL Server中的三個對象,分別為主體(Principals),安全對象(Securables)和權限(Permissions),而權力和限制則是對應了SQL Server中的GRENT和DENY。對于主體,安全對象和權限的初步理解,見圖1.

          1

          圖1.簡單理解主體,安全對象和權限的關系

       

          對于圖1中的造句來說,并沒有主語,也就是并沒有說誰給予的權限(難道是上帝?)。你可以理解為SA賬戶在最開始時給予了其他主體對于安全對象的權限。

       

      SQL Server中的驗證方式

          在給予別人權限之前,或是檢查你是否有某項權限之前,SQL Server首先要知道“你”這個主體是否是你自己號稱的那個主體。比如武俠小說中接頭時對的暗號”天王蓋地虎,寶塔鎮河妖…”就是驗證身份的一種方式。而對于SQL Server,是在你連接SQL Server時SQL Server就需要確認你是誰。SQL Server提供了兩種身份驗證模式:

       

      Windows身份驗證模式

          Windows身份驗證模式就像其名稱所示那樣,由Windows來驗證主體,SQL Server并不參與驗證。SQL Server完全相信Windows的驗證結果。所以用此方式登錄SQL Server時并不需要提供密碼。雖然如此,但Windows身份驗證模式要更加安全,因為Windows身份驗證模式使用了Kerberos(這一名詞來源于希臘神話“三個頭的狗——地獄之門守護者”)協議。這也是微軟推薦的最安全的做法。

          但Windows身份驗證模式在由域控制器控制網絡訪問的情況下才得以使用(當然了,單機也包括在內)。

       

      SQL Server和Windows身份驗證模式(混合模式)

          我一直覺得這種模式的名稱應該改為SQL Server或Windows身份驗證模式更容易理解。這種模式即允許由Windows來驗證主體身份,又允許SQL Server來驗證主體身份,當由SQL Server驗證主體身份時,需要用戶名和密碼來確認主體身份,和使用什么Windows賬戶半毛錢關系都沒有。這些用戶信息被加密后存在Master數據庫中。

       

      設置驗證模式

          設置驗證模式非常簡單。既可以在安裝的時候進行設置,也可以在安裝之后通過右鍵點擊實例,選擇屬性,在安全性選項卡中進行改變,如圖2所示。

          2

          圖2.安裝完SQL Server之后改變身份驗證方式

       

      理解主體

          “主體”是可以請求 SQL Server 資源的實體。主體可以是個體,組或者進程。主體可以按照作用范圍被分為三類:

      •     Windows級別主體
      •     服務器級別主體
      •     數據庫級別主體

       

          Windows 級別的主體包括Windows 域登錄名和Windows 本地登錄名。

          SQL Server級的主體包括SQL Server 登錄名和服務器角色。

          數據庫級的主體包括數據庫用戶和數據庫角色以及應用程序角色。

       

      登錄名

         登錄名是服務器級別的主體,但無論是上述哪個層級的主體,因為需要登錄到SQL Server實例,所以每一個層級的主體都需要一個與之對應的登錄名。對于Windows級別的主體來說,Windows用戶會映射到登錄名。對于數據庫級別的主體來說,其用戶必須映射到登錄名中。而登錄名可以不映射到數據庫用戶,如圖3所示。

          3

             圖3.登錄名的映射關系

       

          在圖3中實例層級的登錄名中,我們看到除了自定義添加的用戶之外,還有一些由系統添加的登錄名。首先,以”##”開頭和結尾的用戶是SQL Server內部使用的賬戶,由證書創建,不應該被刪除。其次是sa賬戶,sa登錄名擁有一切特權,可以在SQL Server中為所欲為,并且不能夠被刪除。因此sa作為分配權限的起點(也就是圖1中所說的主語).因此對于Sa的密碼要設置的盡可能復雜,否則Sa登錄名被盜取后果不堪設想。還有NT AUTHORITY\NETWORK SERVICE和NT AUTHORITY\SYSTEM賬戶是和啟動SQL Server這個Windows服務的賬戶有關,如果使用本地登錄賬戶或是網絡賬戶啟動SQL Server服務,請不要刪除這兩個賬戶,如圖4所示。

              4

            圖4.以本地系統賬戶啟動服務

       

          最后BUILDIN\Administrator賬戶是與本地管理員組關聯的登錄名,默認屬于sysadmin角色。這個賬戶使得任何屬于本地管理員的賬戶都可以獲得對SQL Server的完全控制權。

       

      數據庫用戶
         
      數據庫用戶是數據庫級別的主體,被用于訪問數據庫層面的對象。每一個數據庫用戶都必須要一個與之對用的登錄名。數據庫用戶的信息存在數據庫中,而登錄名存在實例級別的Master數據庫中(但SQL SERVER2012的Contained Database允許將登錄名也存在數據庫級別)。通常來說,數據庫層級的用戶可以和映射的登錄名不一致,但由于這種做法會引起混淆,因此并不推薦。如圖5所示。

          5

          圖5.可以讓用戶名和登錄名不一致,但并不推薦

       

          默認情況下,每個數據庫都帶有4個內置用戶,如圖6所示。

          6

          圖6.數據庫帶的內置用戶

       

          dbo用戶是Database Owner的簡稱,如果說SA是實例級別的老大,那DBO就是數據庫級別的老大。這個用戶也同樣不能被刪除,每一個屬于sysadmin的服務器角色都會映射到數據庫的dbo用戶。每一個表創建時如果沒有指定Schema,則默認在dbo這個schema下。

          guest用戶是一個來賓賬戶,這個賬戶允許登錄名沒有映射到數據庫用戶的情況下訪問數據庫。默認情況下guest用戶是不啟用的,你可以通過代碼1來啟用或不啟用guest用戶。

      --允許guest用戶連接權限
      GRANT CONNECT TO guest
      --收回guest的連接權限
      REVOKE CONNECT TO guest

          代碼1.啟用或回收guest用戶的連接權限

          你也可以給guest用戶分配角色來控制guest的權限(如圖7所示),但是這有可能造成潛在的安全問題,最佳做法是單獨創建數據庫用戶。

          7

          圖7.為guest用戶分配角色

       

          而INFORMATION_SCHEMA用戶和sys用戶擁有系統視圖,因此這兩個數據庫用戶不能被刪除,如圖8所示。

          8

          圖8.INFORMATION_SCHEMA和sys用于訪問系統視圖

       

      角色

          角色是方便對主體進行管理的一種舉措。SQL Server中的角色和Windows中的用戶組是一個概念。屬于某個角色的用戶或登錄名就會擁有相應的權限,這不難理解,就好比你在公司當經理,你就可以報銷多少錢的手機費用。而比你低一個層級的開發人員則沒有這個待遇。用戶或登錄名可以屬于多個角色,這也同樣不難理解,就像你在公司中可以是項目經理,也同時兼任高級工程師一樣。

          角色在SQL Server中被分為三類,分別為:

          內置角色----這類角色在服務器安裝時已經默認存在,其權限是固定的,并且不能被刪除

          用戶自定義角色----這類角色由用戶按照需求自定義創建

          應用程序角色----這類特殊角色用于管理應用程序的數據訪問

       

          內置角色是在安裝SQL Server時就固定的,無論是服務器角色還是數據庫角色,其對應的權限都是固定的。具體每個角色對應的權限請查看MSDN(固定服務器角色http://msdn.microsoft.com/zh-cn/library/ms175892.aspx,固定數據庫角色http://msdn.microsoft.com/zh-cn/library/ms189121.aspx),但這里要注意一個特殊的角色: public角色。

          public角色不同于其它角色,其權限可以被調整,如圖9所示。

          9

          圖9.Public角色不同于其它角色在于其權限可以被修改

       

          可以將Public角色理解為訪問數據庫或實例的最小權限,Public所擁有的權限自動被任何主體繼承,所以對于Public角色的權限修改要格外小心。

       

          而用戶自定義角色是按照用戶自己的需求組成的角色,由用戶創建。

          而應用程序角色并不包含任何用戶,應用程序角色與其說是角色,不如說是一個特殊的用戶。這是為應用程序專門準備的角色,僅僅為應用程序提供數據庫訪問權限。這個角色并不提供給用戶,而是由應用程序的連接字符串嵌入角色名稱和密碼來激活對應權限。

          10

          圖10.不同于其它數據庫角色,應用程序角色需要設置密碼

       

      理解構架

          構架(Schmea)是在SQL Server 2005之后的版本被引入的。可以將構架理解為一個命名空間。在SQL Server2000中其實也有構架的概念,但概念并不同。因為SQL Server 2000中的構架是和用戶綁定的,比如我新建用戶Jack,SQL Server自動分配一個叫Jack構架,用戶Jack并不能改變這個選項,而由Jack所建的任何對象都在Jack之下,比如新建一個表,則為Jack.Table1。當Jack如果離職時,這對管理來說簡直是一場噩夢。

          在SQL Server 2005之后,SQL Server允許用戶和構架分離。使得利用構架去擁有一些數據庫層級的對象,比如說:表,視圖等。

           下面幾種選擇方式,比如當我默認構架是Sales,時,我可以用代碼2中第一種寫法,不用構架:

      SELECT * FROM Customer
      
      SELECT * FROM sales.Customer
      
      SELECT * FROM AdventureWorks.sales.Customer

          代碼2.引用對象的幾種不同寫法

       

          因此,假如Customer表是由Jack建的,我可以將其分配給Sales構架,引用時使用Sales.Customer,而不是Jack.Customer。這無疑大大方便了管理,此外,可以針對構設置權限,這我會在本系列文章后續的文章中講到。

       

      總結

          本文簡單講述了SQL Server的權限體系。以及主體的概念。理解SQL Server的安全性要首先理解這三大方面。下一篇文章中我將接著講述安全對象。

      posted @ 2012-04-10 12:29  CareySon  閱讀(23470)  評論(14)    收藏  舉報
      主站蜘蛛池模板: 亚洲成av人无码免费观看| 精品综合一区二区三区四区| 日本免费精品| 色老头亚洲成人免费影院| 日韩精品一区二区高清视频| 亚洲乱妇熟女爽到高潮的片| 精品午夜福利短视频一区| 唐人社视频呦一区二区| 国产成人亚洲综合| 国产午夜91福利一区二区| 99RE8这里有精品热视频| 国产伦精区二区三区视频| 最近免费中文字幕大全| 又大又黄又粗高潮免费| 国产乱码1卡二卡3卡四卡5| 精品亚洲男人一区二区三区| 日韩人妻无码一区二区三区综合部| 午夜视频免费试看| 色噜噜狠狠色综合成人网| 波多野结衣av无码| 亚洲午夜成人精品电影在线观看 | 亚洲欧美日韩国产精品专区| 明光市| 精品国产综合成人亚洲区| 精品久久精品午夜精品久久| AI做受???高潮AAAA视频| 亚洲综合小说另类图片五月天| 日本精品一区二区不卡| 日韩视频中文字幕精品偷拍| 麻豆一区二区中文字幕| 亚洲欧美综合一区二区三区| 视频一区二区三区高清在线| 无码av中文字幕免费放| 在线看片免费人成视久网| 国产重口老太和小伙| 四虎在线成人免费观看| 免费费很色大片欧一二区| 定南县| 乱码午夜-极品国产内射| 亚洲国产精品久久久天堂麻豆宅男| 日韩有码中文在线观看|