SQL Server 使用者名稱和登入名稱

來源:互聯網
上載者:User

SQL Server使用者名稱和登入名稱的關係總結

  登入名稱:伺服器方的一個實體,使用一個登入名稱只能進入伺服器,但是不能讓使用者訪問伺服器中的資料庫資源。每個登入名稱的定義存放在master資料庫的syslogins表中

  使用者名稱:一個或多個登入對象在資料庫中的映射,可以對使用者物件進行授權,以便為登入對象提供對資料庫的存取權限。使用者定義資訊存放在每個資料庫的sysusers表中。

  SQL SERVER把登入名稱與使用者名稱的關係稱為映射。用登入名稱登入SQL SERVER後,在訪問各個資料庫時,SQLSERVER會自動查詢此資料庫中是否存在與此登入名稱關聯的使用者名稱,若存在就使用此使用者的許可權訪問此資料庫,若不存在就是用guest使用者訪問此資料庫(guest是一個特殊的使用者名稱,後面會講到)。

  一個登入名稱可以被授權訪問多個資料庫,但一個登入名稱在每個資料庫中只能映射一次。即一個登入可對應多個使用者,一個使用者也可以被多個登入使用。好比SQLSERVER就象一棟大樓,裡面的每個房間都是一個資料庫.登入名稱只是進入大樓的鑰匙,而使用者名稱則是進入房間的鑰匙.一個登入名稱可以有多個房間的鑰匙,但一個登入名稱在一個房間只能擁有此房間的一把鑰匙。

  連結或登入SQL Server伺服器時是用的登入名稱而非使用者名稱登入的,程式裡面的連結字串中的使用者名稱也是指登入名稱。

  SQLSERVER中有幾個特殊的登入名稱和使用者名稱:

  我們常見的dbo(使用者名稱)是指以sa(登入名稱)或windows administration(Windows整合驗證登入方式)登入的使用者,也就是說資料庫管理員在SQLSERVER中的使用者名稱就叫dbo,而不叫 sa,這一點看起來有點蹊蹺,因為通常使用者名稱與登入名稱相同(不是強制相同,但為了一目瞭然通常都在建立使用者名稱時使用與登入名稱相同的名字),例如建立了一個登入名稱稱為me,那麼可以為該登入名稱me在指定的資料庫中添加一個同名使用者,使登入名稱me能夠訪問該資料庫中的資料.當在資料庫中添加了一個使用者me 後,之後以me登入名稱登入時在該資料庫中建立的一切對象(表,函數,預存程序等)的所有者都為me,如me.table1,me.fn_test(),而不是dbo.table1,dbo.fn_test().

  SQL Server中還有一個特殊的資料庫角色public,它存在於每一個資料庫中,包括系統資料庫,如master、msdb、model和使用者資料庫,資料庫的所有使用者都屬於public角色,並且不能從public角色中刪除。

  在SQLSERVER資料庫中,guest帳戶是特殊的使用者帳戶。如果使用者使用USE database語句訪問的資料庫中沒有與此使用者關聯的帳戶,此使用者就與guest使用者相關聯。

  另外SQLSERVER採取登入名稱-使用者名稱的安全規則,和Oracle裡面的schema有點像。SQLSERVER使用所有者進行限定(類似於Oracle中的schema),是因為不同的使用者可能建立同名的對象,例如登入名稱me和登入名稱you在pubs資料庫中分別建立了使用者名稱me和you,這二個使用者都建立了testtable這個同名表,而這二個表雖然同名但結構或資料可能完全不同,為了避免調用錯誤,必須使用所有者名稱進行限定.

  如何來調用別的使用者建立的對象呢?例如me使用者訪問you使用者建立的表或訪問dbo建立的表. 此種情況,必須同時滿足二個條件:

  1.將me使用者的資料庫角色設定為db_owner,否則無法訪問其他使用者(包括dbo使用者)建立的對象.(企業管理器-> 使用者,右鍵菜單 <屬性> 中設定) :

  2.使用所有者進行限定.

  例如me訪問you建立的testtable:

  select * from you.testtable

  另外,dbo使用者作為管理員,系統賦予其所有的許可權,可以調用任何使用者建立的對象.

  若某個資料庫存在2個或2個以上的使用者名稱,如果具有db_owner角色的使用者在訪問對象時省略了所有者,則系統先尋找該使用者的對象,若找不到則尋找dbo使用者是否有同名對象.例如:

  select * from testtable 或

  select * from pubs..testtable

  實驗:

  建立登入名稱login_ibrahim

  用此登入名稱登入“查詢分析器”,發現只能查看系統內建的資料庫,如master、Northwind、pubs等

  將登入名稱login_ibrahim的伺服器角色設定為Database Creator(若不設定此項,則無法建立資料庫)

  在“查詢分析器”中輸入create database test,然後執行,這會建立一個名為test的資料庫

  查看test資料庫擁有的使用者名稱,發現系統會自動建立了dbo和guest這兩個使用者名稱。其中dbo使用者名稱對應的登入名稱為login_ibrahim,不能更改test資料庫登入名稱login_ibrahim所對應的使用者名稱dbo,此時test資料庫的dbo使用者名稱,其對應的登入名稱有兩個,一個是login_ibrahim,另一個是sa(沒想到吧^_^,因為sysadmin 固定伺服器角色的成員會自動對應到 dbo。)

  建立登入名稱login_ibrahim2,不設定任何伺服器角色,將可訪問資料庫設定為test

  開啟test資料庫的使用者名稱列表,會發現系統會為登入名稱login_ibrahim2自動建立一個同名的使用者名稱login_ibrahim2,然後再建立一個名為T_ibrahim的資料表

  此時用login_ibrahim2登入SQLSERVER,發現不能在test資料庫中建立表

  用login_ibrahim登入SQLSERVER,為login_ibrahim2使用者名稱授予對test資料的db_ddladmin許可權

  此時用login_ibrahim2登入SQLSERVER,發現可以建立資料表(建立名為T_ibrahim的資料表),並插入資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.