IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫MSSQL → SQL Server中用戶名與登錄名關(guān)系辨析談

SQL Server中用戶名與登錄名關(guān)系辨析談

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

以前經(jīng)常被SQL Server中的用戶名和登錄名搞迷糊,因?yàn)橛胹a(登錄名)就搞定一切東西了,當(dāng)然這會存在一些安全隱患。網(wǎng)上的文章也貌似講得很好,但還是不明白。今天決心把這個問題弄明白。mashallah, 看了N多文章加實(shí)驗(yàn)后終于弄明白了(學(xué)東西最重要的還是要親自動手試試),現(xiàn)將學(xué)到的分享一下,看是否對你有幫助。

登錄名:服務(wù)器方的一個實(shí)體,使用一個登錄名只能進(jìn)入服務(wù)器,但是不能讓用戶訪問服務(wù)器中的數(shù)據(jù)庫資源。每個登錄名的定義存放在master數(shù)據(jù)庫的syslogins表中

用戶名:一個或多個登錄對象在數(shù)據(jù)庫中的映射,可以對用戶對象進(jìn)行授權(quán),以便為登錄對象提供對數(shù)據(jù)庫的訪問權(quán)限。用戶定義信息存放在每個數(shù)據(jù)庫的sysusers表中。

SQLSERVER把登錄名與用戶名的關(guān)系稱為映射。用登錄名登錄SQLSERVER后,在訪問各個數(shù)據(jù)庫時,SQLSERVER會自動查詢此數(shù)據(jù)庫中是否存在與此登錄名關(guān)聯(lián)的用戶名,若存在就使用此用戶的權(quán)限訪問此數(shù)據(jù)庫,若不存在就是用guest用戶訪問此數(shù)據(jù)庫(guest是一個特殊的用戶名,后面會講到)。

一個登錄名可以被授權(quán)訪問多個數(shù)據(jù)庫,但一個登錄名在每個數(shù)據(jù)庫中只能映射一次。即一個登錄可對應(yīng)多個用戶,一個用戶也可以被多個登錄使用。好比SQLSERVER就象一棟大樓,里面的每個房間都是一個數(shù)據(jù)庫.登錄名只是進(jìn)入大樓的鑰匙,而用戶名則是進(jìn)入房間的鑰匙.一個登錄名可以有多個房間的鑰匙,但一個登錄名在一個房間只能擁有此房間的一把鑰匙。

鏈接或登錄SQL Server服務(wù)器時是用的登錄名而非用戶名登錄的,程序里面的鏈接字符串中的用戶名也是指登錄名。

SQL SERVER中有幾個特殊的登錄名和用戶名:

我們常見的dbo(用戶名)是指以sa(登錄名)或windows?? administration(Windows集成驗(yàn)證登錄方式)登錄的用戶,也就是說數(shù)據(jù)庫管理員在SQLSERVER中的用戶名就叫dbo,而不叫 sa,這一點(diǎn)看起來有點(diǎn)蹊蹺,因?yàn)橥ǔS脩裘c登錄名相同(不是強(qiáng)制相同,但為了一目了然通常都在創(chuàng)建用戶名時使用與登錄名相同的名字),例如創(chuàng)建了一個登錄名稱為me,那么可以為該登錄名me在指定的數(shù)據(jù)庫中添加一個同名用戶,使登錄名me能夠訪問該數(shù)據(jù)庫中的數(shù)據(jù).當(dāng)在數(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角色中刪除。

在SQL Server數(shù)據(jù)庫中,guest帳戶是特殊的用戶帳戶。如果用戶使用USE database語句訪問的數(shù)據(jù)庫中沒有與此用戶關(guān)聯(lián)的帳戶,此用戶就與guest用戶相關(guān)聯(lián)。

另外SQLSERVER采取登錄名-用戶名的安全規(guī)則,和Oracle里面的schema有點(diǎn)像。SQLSERVER使用所有者進(jìn)行限定(類似于Oracle中的schema),是因?yàn)椴煌挠脩艨赡軇?chuàng)建同名的對象,例如登錄名me和登錄名you在pubs數(shù)據(jù)庫中分別創(chuàng)建了用戶名me和you,這二個用戶都創(chuàng)建了testtable這個同名表,而這二個表雖然同名但結(jié)構(gòu)或數(shù)據(jù)可能完全不同,為了避免調(diào)用錯誤,必須使用所有者名稱進(jìn)行限定.

如何來調(diào)用別的用戶創(chuàng)建的對象呢?

例如me用戶訪問you用戶創(chuàng)建的表或訪問dbo創(chuàng)建的表. 此種情況,必須同時滿足二個條件:

1.將me用戶的數(shù)據(jù)庫角色設(shè)置為db_owner,否則無法訪問其他用戶(包括dbo用戶)創(chuàng)建的對象.(企業(yè)管理器-> 用戶,右鍵菜單 <屬性> 中設(shè)置)? :

2.使用所有者進(jìn)行限定.

例如me訪問you創(chuàng)建的testtable:

  1. select???*???from???you.testtable??

另外,dbo用戶作為管理員,系統(tǒng)賦予其所有的權(quán)限,可以調(diào)用任何用戶創(chuàng)建的對象.

若某個數(shù)據(jù)庫存在2個或2個以上的用戶名,如果具有db_owner角色的用戶在訪問對象時省略了所有者,則系統(tǒng)先查找該用戶的對象,若找不到則查找dbo用戶是否有同名對象.例如:?

  1. select???*???from???testtable?????或? ?
  2. select???*???from???pubs..testtable?

實(shí)驗(yàn):

創(chuàng)建登錄名login_ibrahim

用此登錄名登錄"查詢分析器",發(fā)現(xiàn)只能查看系統(tǒng)自帶的數(shù)據(jù)庫,如master、Northwind、pubs等

將登錄名login_ibrahim的服務(wù)器角色設(shè)置為Database Creator(若不設(shè)置此項(xiàng),則無法創(chuàng)建數(shù)據(jù)庫)

在"查詢分析器"中輸入create database test,然后執(zhí)行,這會創(chuàng)建一個名為test的數(shù)據(jù)庫

查看test數(shù)據(jù)庫擁有的用戶名,發(fā)現(xiàn)系統(tǒng)會自動創(chuàng)建了dbo和guest這兩個用戶名。其中dbo用戶名對應(yīng)的登錄名為login_ibrahim,不能更改test數(shù)據(jù)庫登錄名login_ibrahim所對應(yīng)的用戶名dbo,此時test數(shù)據(jù)庫的dbo用戶名,其對應(yīng)的登錄名有兩個,一個是login_ibrahim,另一個是sa(沒想到吧^_^,因?yàn)閟ysadmin 固定服務(wù)器角色的成員會自動映射到 dbo。)

創(chuàng)建登錄名login_ibrahim2,不設(shè)置任何服務(wù)器角色,將可訪問數(shù)據(jù)庫設(shè)置為test

打開test數(shù)據(jù)庫的用戶名列表,會發(fā)現(xiàn)系統(tǒng)會為登錄名login_ibrahim2自動創(chuàng)建一個同名的用戶名login_ibrahim2,然后再創(chuàng)建一個名為T_ibrahim的數(shù)據(jù)表

此時用login_ibrahim2登錄SQLSERVER,發(fā)現(xiàn)不能在test數(shù)據(jù)庫中創(chuàng)建表

用login_ibrahim登錄SQLSERVER,為login_ibrahim2用戶名授予對test數(shù)據(jù)的db_ddladmin權(quán)限

此時用login_ibrahim2登錄SQLSERVER,發(fā)現(xiàn)可以創(chuàng)建數(shù)據(jù)表(創(chuàng)建名為T_ibrahim的數(shù)據(jù)表),并插入數(shù)據(jù)。

原文標(biāo)題:Sql Server用戶名和登錄名的關(guān)系總結(jié)

鏈接:http://www.cnblogs.com/ibrahim/archive/2010/06/21/sqlserver_loginname_username.html

關(guān)鍵詞標(biāo)簽:SQL Server

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 SqlServer2005對現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系

相關(guān)下載

    人氣排行 配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法