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

2021-12-22 18:26:11 字數 3212 閱讀 4412

登入名:伺服器方的乙個實體,使用乙個登入名只能進入伺服器,但是不能讓使用者訪問伺服器中的資料庫資源。每個登入名的定義存放在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,如而不是

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

另外,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的資料表),並插入資料!

訂閱同步。這個就是配置。

先說第一種:

啟動a的非同步查詢支援。

exec sp_configure 'show advanced options',1

reconfigure

exec sp_configure 'ad hoc distributed queries',1

reconfigure

寫上刪除語句,delete from where 你的條件。

插入:use [a]

insert into

(c的所有字段,用逗號分隔)

select 的字段

from

opendatasource對應

('sqloledb',

'data source=b的ip;user id=使用者名稱;password=密碼'

).別的方法就是建立共同賬號,共同在乙個服務下管理,那麼就不用非同步查詢了!直接資料庫名.

查詢完畢:

關閉exec sp_configure 'ad hoc distributed queries',0

reconfigure

exec sp_configure 'show advanced options',0

reconfigure

SQL server語法總結

標示符的作用 表示該選項可以省略 表示該選項可以重複一次或者多次 表示在實際的語句中用相應的內容進行替代 表示有相應的引數時,中的內容是必須的 1 建立資料庫 create database database name on n n log on n collate collate name fil...

sqlserver巡檢方案

目錄1 前言 1 1.1 目的 1 1.2 範圍 1 1.3 內容提要 1 2 巡檢方案 1 2.1 巡檢週期 1 2.2 巡檢目標 1 2.3 服務型別 1 2.4 巡檢方式 1 2.5 巡檢項 1 2.5.1 伺服器 1 2.5.2 資料庫 2 2.5.3 應用系統 3 2.5.4 網路通訊 4...

SQL SERVER高階應用培訓大綱

1 乙個大型管理軟體的表結構如何設計 1 表結構設計的原則與規範 2 常用管理軟體功能模組的表結構設計 3 多語言系統的表結構設計 4 多家公司租用系統的表結構設計 5 用友u8財務的表結構分析 6 用友u8進銷存的表結構分析 7 領航考勤系統的表結構分析 2 一條select語句打天下 1 50條...