Sql Server使用者名稱和登入名的關係總結
Sql Server中的使用者名稱和登入名(或伺服器賬號)搞迷糊(如下圖所示):
雖然用sa(登入名)就搞定一切東西了,當然這會存在一些安全隱患。
登入名
伺服器方的一個實體,使用一個登入名只能進入伺服器,但是不能讓使用者訪問伺服器中的資料庫資源。每個登入名的定義存放在master資料庫的syslogins表中
使用者名稱
一個或多個登入物件在資料庫中的對映,可以對使用者物件進行授權,以便為登入物件提供對資料庫的訪問許可權。使用者定義資訊存放在每個資料庫的sysusers表中。
SQLSERVER把登入名與使用者名稱的關係稱為對映。
用登入名登入SQLSERVER後,在訪問各個資料庫時,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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26435490/viewspace-1442704/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sql Server關於許可權、角色以及登入名、使用者名稱的總結SQLServer
- sql server 登入名和使用者名稱的區別和聯絡SQLServer
- SQL SERVER 使用者名稱、密碼登入判斷SQLServer密碼
- 修改 Ubuntu 系統使用者名稱和登入名Ubuntu
- SQL SERVER 檢視當前登入使用者名稱的系統函式SQLServer函式
- sqlplus顯示登入使用者名稱和例項名SQL
- 使用者名稱登入不了網站網站
- [備忘]刪除SQL Server中無登入名的使用者SQLServer
- 關於登入(使用者名稱,密碼,驗證碼)密碼
- SQL Server 2008登入名的建立SQLServer
- VMWare Server 2.0 的使用者名稱和密碼Server密碼
- SQL資料庫使用者只有“名稱”而無“登陸名”解決SQL資料庫
- SQLServer刪除登入記錄使用者名稱和密碼SQLServer密碼
- 關於修改資料庫名稱和ID的方法總結資料庫
- 關於資料庫登陸名和資料庫使用者名稱的一點點心得資料庫
- 如何把 Laravel 預設郵箱登入改成使用者名稱登入Laravel
- 使用者名稱和密碼輸入練習密碼
- Laravel 實現使用者名稱 + 郵箱 + 手機號登入Laravel
- Go基礎:路徑、檔名和包名的關係Go
- SQL Server 別名(as)SQLServer
- 登入判斷使用者名稱和密碼是否正確的程式碼(連結和讀取資料庫)密碼資料庫
- win8系統如何取消使用者名稱密碼登入密碼
- Java中類名與檔名的關係Java
- git 使用者名稱密碼相關Git密碼
- K8Sdashboard登入問題(chrome無法訪問以及使用使用者名稱和密碼登入)K8SChrome密碼
- iOS RSA的網路安全模型、iOS簽名機制總結(登入、token安全、簽名)iOS模型
- Git修改提交的使用者名稱和EmailGitAI
- SQL Server 不同網段IP通過名稱訪問SQLServer
- 從螢幕上讀入使用者名稱和密碼密碼
- sql server 修改表名SQLServer
- Laravel6:自定義多欄位登入,使用者名稱,郵箱等Laravel
- git使用者名稱和郵箱配置Git
- 關於訪問資料庫的使用者名稱和密碼資料庫密碼
- SQL SERVER 登入問題!該使用者與可信的Sql Server連線無關聯SQLServer
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- 修改oracle中的使用者名稱和密碼Oracle密碼
- linux 關閉只允許SSH登陸(允許使用者名稱、密碼登陸)Linux密碼
- 實現 使用者名稱或郵箱等 任意一個欄位均可登入