Sql Server中的用戶名和登錄名
登錄名
服務器方的一個實體,使用一個登錄名只能進入服務器,但是不能讓用戶訪問服務器中的數(shù)據(jù)庫資源。每個登錄名的定義存放在 master 數(shù)據(jù)庫的 syslogins 表中
用戶名
一個或多個登錄對象在數(shù)據(jù)庫中的映射,可以對用戶對象進行授權,以便為登錄對象提供對數(shù)據(jù)庫的訪問權限。用戶定義信息存放在每個數(shù)據(jù)庫的 sysusers 表中。
SQLSERVER把登錄名與用戶名的關系稱為映射。
用登錄名登錄SQLSERVER后,在訪問各個數(shù)據(jù)庫時,SQLSERVER會自動查詢此數(shù)據(jù)庫中是否存在與此登錄名關聯(lián)的用戶名,若存在就使用此用戶的權限訪問此數(shù)據(jù)庫,若不存在就是用guest用戶訪問此數(shù)據(jù)庫(guest是一個特殊的用戶名,后面會講到)。
一個登錄名可以被授權訪問多個數(shù)據(jù)庫,但一個登錄名在每個數(shù)據(jù)庫中只能映射一次。即一個登錄可對應多個用戶,一個用戶也可以被多個登錄使用。好比SQLSERVER就象一棟大樓,里面的每個房間都是一個數(shù)據(jù)庫.登錄名只是進入大樓的鑰匙,而用戶名則是進入房間的鑰匙.一個登錄名可以有多個房間的鑰匙,但一個登錄名在一個房間只能擁有此房間的一把鑰匙。
鏈接或登錄Sql Server服務器時是用的登錄名而非用戶名登錄的,程序里面的鏈接字符串中的用戶名也是指登錄名。
SQLSERVER中有幾個特殊的登錄名和用戶名:
我們常見的dbo(用戶名)是指 以sa(登錄名)或windows administration(Windows集成驗證登錄方式)登錄的用戶,也就是說數(shù)據(jù)庫管理員在SQLSERVER中的用戶名就叫dbo,而不叫 sa,這一點看起來有點蹊蹺,因為通常用戶名與登錄名相同(不是強制相同,但為了一目了然通常都在創(chuàng)建用戶名時使用與登錄名相同的名字),
例如創(chuàng)建了一個登錄名稱為me,那么可以為該登錄名me在指定的數(shù)據(jù)庫中添加一個同名用戶,使登錄名me能夠訪問該數(shù)據(jù)庫中的數(shù)據(jù).當在數(shù)據(jù)庫中添加了一個用戶me 后,之后以me登錄名登錄時在該數(shù)據(jù)庫中創(chuàng)建的一切對象(表,函數(shù),存儲過程等)的所有者都為me,如me.table1,me.fn_test(),而不是dbo.table1,dbo.fn_test().
SQL Server中還有一個特殊的數(shù)據(jù)庫角色public,它存在于每一個數(shù)據(jù)庫中,包括系統(tǒng)數(shù)據(jù)庫,如master、msdb、model和用戶數(shù)據(jù)庫,數(shù)據(jù)庫的所有用戶都屬于public角色,并且不能從public角色中刪除。
在SQLSERVER數(shù)據(jù)庫中,guest帳戶是特殊的用戶帳戶。如果用戶使用USE database語句訪問的數(shù)據(jù)庫中沒有與此用戶關聯(lián)的帳戶,此用戶就與guest用戶相關聯(lián)。
另外SQLSERVER采取登錄名-用戶名的安全規(guī)則,和Oracle里面的schema有點像。SQLSERVER使用所有者進行限定(類似于Oracle中的schema),是因為不同的用戶可能創(chuàng)建同名的對象, 例如登錄名me和登錄名you在pubs數(shù)據(jù)庫中分別創(chuàng)建了用戶名me和you,這二個用戶都創(chuàng)建了testtable這個同名表,而這二個表雖然同名但結(jié)構(gòu)或數(shù)據(jù)可能完全不同,為了避免調(diào)用錯誤,必須使用所有者名稱進行限定.
如何來調(diào)用別的用戶創(chuàng)建的對象呢? 例如me用戶訪問you用戶創(chuàng)建的表或訪問dbo創(chuàng)建的表. 此種情況,必須同時滿足二個條件:
1. 將me用戶的數(shù)據(jù)庫角色設置為db_owner,否則無法訪問其他用戶(包括dbo用戶)創(chuàng)建的對象.(企業(yè)管理器-> 用戶,右鍵菜單 <屬性> 中設置) :
2. 使用所有者進行限定.
例如用戶me訪問用戶you創(chuàng)建的testtable:
select * from you.testtable
另外, dbo用戶作為管理員,系統(tǒng)賦予其所有的權限,可以調(diào)用任何用戶創(chuàng)建的對象.
若某個數(shù)據(jù)庫存在2個或2個以上的用戶名,如果具有db_owner角色的用戶在訪問對象時省略了所有者,則系統(tǒng)先查找該用戶的對象,若找不到則查找dbo用戶是否有同名對象.例如:
select * from testtable 或
select * from pubs..testtable
相關文章
sqlserver 存儲過程動態(tài)參數(shù)調(diào)用實現(xiàn)代碼
sqlserver 存儲過程動態(tài)參數(shù)調(diào)用實現(xiàn)代碼,需要的朋友可以參考下。2011-10-10SQL?Server數(shù)據(jù)庫如何查看表的數(shù)據(jù)內(nèi)容
查詢數(shù)據(jù)在數(shù)據(jù)庫的操作中相當重要的,在項目實訓中查詢是經(jīng)常要用到的,所以掌握數(shù)據(jù)庫的查詢是基本要求,這篇文章主要給大家介紹了關于SQL?Server數(shù)據(jù)庫如何查看表的數(shù)據(jù)內(nèi)容的相關資料,需要的朋友可以參考下2023-11-11SQL Server 中調(diào)整自增字段的當前初始值
SQL Server 中調(diào)整自增字段的當前初始值...2007-01-01CentOS 7.3上SQL Server vNext CTP 1.2安裝教程
這篇文章主要為大家詳細介紹了CentOS 7.3上SQL Server vNext CTP 1.2安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01當恢復sqlserver bak文件時,原始的用戶無法刪除的解決方法
當你從現(xiàn)有的bak文件,恢復數(shù)據(jù)庫時,如果數(shù)據(jù)庫本身帶有一個用戶:比如用戶叫:DemoUser.2010-06-06sql server中批量插入與更新兩種解決方案分享(存儲過程)
對于sql 來說操作集合類型(一行一行)是比較麻煩的一件事,而一般業(yè)務邏輯復雜的系統(tǒng)或項目都會涉及到集合遍歷的問題,通常一些人就想到用游標,這里我列出了兩種方案,供大家參考2012-05-05sqlserver 數(shù)據(jù)庫日志備份和恢復步驟
sqlserver 數(shù)據(jù)庫日志備份和恢復實現(xiàn)步驟2009-05-05sqlserver存儲過程中SELECT 與 SET 對變量賦值的區(qū)別
SQLServer中對已經(jīng)定義的變量賦值的方式用兩種,分別是 SET 和 SELECT。對于這兩種方式的區(qū)別,SQL Server 聯(lián)機叢書中已經(jīng)有詳細的說明,但很多時候我們并沒有注意,其實這兩種方式還是有很多差別的。2011-04-04