Sql Server 中的Login,Schema,User,Role之間的關係

來源:互聯網
上載者:User

相信很多人初次看到這幾個對象都會暈,今天我就帶領大家一起來把這幾個概念捋一捋。

·         Login

      Login 是Server一級的概念,表示登入Server的憑證,比如在Server_A上有一個資料庫DA,那麼想要訪問資料庫DA,第一步要做的事情就是先登入到Hosting該資料庫的Server_A上,資料庫管理員可以用下面的T-SQL語句來建立一個Login,暫且命名為ReportLogin。

o    Windows Authentication:

Create login [ReportLogin] from windows with default_database = [master],default_language = [us_english]

o    SQL Server Authentication:

Create login [ReportLogin] with password = N'123456',default_database = [master],default_language = [us_english]

      安裝完資料庫軟體後,會有一些預建立的Login,比較著名的就是sa和BuildIn\Administrators。

·         User

      有了一個Login,表明你可以登入hosting該Database的Server,並不表明你能夠訪問資料庫,除非你是內建的Windows管理員,否則,你只能登入到該Server上,什麼事情都做不了,就好比,你有了一個私家小院的大門鑰匙(Login),你開啟大門(登入),你只能在院子裡邊站著,因為房間的門都是鎖著的,你沒有房間的鑰匙(User)啊,怎樣才能進到屋子裡邊去呢?User就是要完成這樣的功能。我們可以用下邊的T-SQL語句來建立一個User,暫且命名為ReportUser,由於User屬於資料庫物件,不屬於Server對象(Login屬於Server對象),因此我們如果想建立一個User,首先必須進入到想建立User的資料庫中(use 該資料庫),然後建立User。

create user [ReportUser] for login [ReportLogin] with default_schema = ReportSchema

go

       通過語句我們可以看出來,每一個User都要映射到一個Login,所以這裡的關係就是: 

·         每個User必須對應一個Login。

·         每個Login可以對應多個User,前提是User在不同的資料庫中。

       一旦我們建立了映射到某個Login的User,那麼此時,如果我們用該Login登入,就可以訪問擁有該User的資料庫了,繼續打比方,我們用Login開啟了大門,我們進入了小院子,此時我們還有一個User,就表明我們手上還有某個房間門的鑰匙,那麼此時我們可以開啟房間門(資料庫),堂而皇之地進入到這個小房間了。

    安裝完資料庫軟體後,會有一些預建立的User,比較著名的就是dbo,guest,sys等等。

      再仔細看T-SQL語句,我們會發現有一個預設的架構(Schema),什麼意思?接著往下看就知道了。

·         Schema

    九牛二虎之力之後,我們終於如願以償地進入到我們的房間了,卻發現原來裡邊都是上下鋪,究竟那個床(Schema)才是我的呢?我能把我的行李放在哪裡呢?這個就是架構,Schema:資料庫資料庫結構描述是一個獨立於資料庫使用者的非重複命名空間,您可以將架構視為對象的容器,這不就是床了,放東西啦。相信容器的概念大家已經很熟悉了,比如一塊新硬碟,我們會為他劃分為N個盤符,C:,D:,E:啊之類的,在每個盤符之下,我們又有N個檔案夾Folder,這些都是容器。再比如我們可以拿一個網站來做類比,一個網站包含很多的網頁,圖片,指令檔,我們姑且稱它為網站對象。顯然,我們不可能把所有的網站對象都放到一個檔案夾下面,同樣道理,資料庫物件也不可能象煮餃子一樣就在資料庫裡這麼一鍋出。對於網站,我們通常會把不同模組的檔案放在不同的子檔案夾下,那麼誰是存放資料庫物件的檔案夾呢?答案就是:架構(Schema)。

     實際上資料庫的每個對象都是有架構的,既每個資料庫物件都有放的位置,但是我們很多人在建立資料庫物件的時候卻沒有指定,那麼他們放在哪裡了呢?在SQL Server 2005之後的版本中,當我們建立資料庫物件沒有顯式指定Schema時,資料庫會為我們預設地指定一個預設Schema: dbo。所有沒有顯式指定Schema的資料庫物件,統統地被放在了dbo這個公用空間中。

     架構(Schema)概念的引入就是為瞭解決資料庫物件太多不好管理的缺點。

    安裝完資料庫軟體後,會有一些預建立的Schema,包括dbo,以及每個以預定義Role命名的Schema,比如:db_owner,db_datareader,db_datawriter等等。

·         Role

       角色這個概念是為了降低管理成本,簡化管理的工作量而出現的,試想如果一個公司有1000人,每個人都需要對某個表進行write的許可權,如果沒有角色,我們要對這1000個人分別Grant許可權,就是單單copy運行,也需要很久啊,如果公司有3000人呢?估計管理員早就不幹了。角色(Role)就是為瞭解決這個問題而出現的。建立一個角色(Role),資料庫管理員只用Grant這個角色擁有對這個個表的write許可權就OK了,下一步要做的工作就是把公司裡邊需要對這個表具有write許可權的員工賦予這個Role即可,管理成本是不是降低了不少。

     安裝完資料庫軟體後,會有一些預建立的Server Role和Database Role(以db_開頭)。

o   Server Roles:

1.       bulkadmin

2.       dbcreator

3.       diskadmin

4.       processadmin

5.       public               ---- 每個建立login的預設Server Role

6.       securityadmin

7.       serveradmin

8.       setupadmin

9.       sysadmin

o   Database Roles:

1.       db_accessadmin

2.       db_backupopeator

3.       db_datareader

4.       db_datawriter

5.       db_ddladmin

6.       db_denydatareader

7.       db_denydatawriter

8.       db_owner

9.       db_securityadmin

10.   public

     至於具體每個角色的許可權有多大,究竟每個角色能做什麼事情,請查看Book Online,微軟的idea是資料庫所預裝的Role能完成大部分的許可權分配問題。

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/yanjiangbo/archive/2009/08/26/4486222.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.