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

2022-03-06 21:13:28 字數 4095 閱讀 4213

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

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

實驗:l

建立登入名

login_ibrahim

l用此登入名登入「查詢分析器」,發現只能檢視系統自帶的資料庫,如

master

、northwind

、pubs等l

將登入名

login_ibrahim

的伺服器角色設定為

database creator

(若不設定此項,則無法建立資料庫)

l在「查詢分析器」中輸入

create database test

,然後執行,這會建立乙個名為

test

的資料庫l檢視

test

資料庫擁有的使用者名稱,發現系統會自動建立了

dbo和

guest

這兩個使用者名稱。其中

dbo使用者名稱對應的登入名為

login_ibrahim

,不能更改

test

資料庫登入名

login_ibrahim

所對應的使用者名稱

dbo,此時

test

資料庫的

dbo使用者名稱,其對應的登入名有兩個,乙個是

login_ibrahim

,另乙個是

sa(沒想到吧

^_^,因為

sysadmin

固定伺服器角色的成員會自動對映到

dbo。)l

建立登入名

login_ibrahim2

,不設定任何伺服器角色,將可訪問資料庫設定為

testl開啟

test

資料庫的使用者名稱列表,會發現系統會為登入名

login_ibrahim2

自動建立乙個同名的使用者名稱

login_ibrahim2

,然後再建立乙個名為

t_ibrahim

的資料表

l此時用

login_ibrahim2

登入sqlserver

,發現不能在

test

資料庫中建立表l用

login_ibrahim

登入sqlserver

,為login_ibrahim2

使用者名稱授予對

test

資料的db_ddladmin許可權l

此時用login_ibrahim2

登入sqlserver

,發現可以建立資料表(建立名為

t_ibrahim

的資料表),並插入資料。

SQL server 使用者名稱sa登入失敗

首先選擇 windows身份驗證 模式連線資料庫引擎。在建立的連線上右鍵單擊,選擇 屬性 進入 伺服器屬性 介面。在左側選擇頁中點選 安全性 然後在右側安全性設定介面的 伺服器身份驗證 一欄中選擇 sql server和windows身份驗證模式 點選 確定 按鈕。完成上述步驟之後,再次連線還是不能...

python註冊使用者名稱和密碼登入 使用者名稱和密碼登入

我想建立乙個登入,其中將開啟乙個文字 csv檔案,從檔案中讀取 有效 的使用者名稱和密碼,然後如果使用者新增的內容與檔案中的內容匹配,那麼它將允許訪問程式的其餘部分 如何將下面的 整合到其中乙個檔案中開啟乙個檔案,讀取有效的使用者名稱和密碼,並根據使用者的輸入進行檢查 目前我有一些工作,但只有乙個密...

顯示使用者登入使用者名稱

使用springsecurity進行操作 產生乙個上下文棧 securitycontext 自動儲存到session域中 通過securitycontext l可以獲得認證物件 authentication 封裝principal 主角 屬性 principal就是當前使用者物件user 包含使用者...