Chapter 2 User Authentication, Authorization, and Security(8):建立映射到登入名稱的資料庫使用者,authentication

來源:互聯網
上載者:User

Chapter 2 User Authentication, Authorization, and Security(8):建立映射到登入名稱的資料庫使用者,authentication
原文出處:http://blog.csdn.net/dba_huangzj/article/details/38944121,專題目錄:http://blog.csdn.net/dba_huangzj/article/details/37906349

未經作者同意,任何人不得以“原創”形式發布,也不得已用於商業用途,本人不負責任何法律責任。

        前一篇:http://blog.csdn.net/dba_huangzj/article/details/38895357

 

前言:

 

登入名稱用於授權並訪問伺服器資源,如果需要訪問資料庫,需要對資料庫內部的使用者進行映射。使用者是資料庫層級的安全性主體,訪問資料庫資源是授予給使用者,而不是登入名稱。

 

實現:

 

有兩種方法可以實現建立資料庫使用者,第一種是在伺服器層級的登入名稱的屬性頁面,另外一種是在資料庫的【安全性】→【使用者】節點中實現,這裡使用第二種方式示範:

1.在SSMS中,選擇【資料庫】節點,並展開對應的資料庫,選擇【安全性】,右鍵【使用者】選擇【建立使用者】

2. 在【常規】頁,可以選擇下面的使用者類型:

 

類型簡要說明:

使用者類型 描述
SQL user with login(帶登入名稱的SQL使用者) 映射到一個SQL登入的使用者。
SQL user without login(不帶登入名稱的SQL使用者) 沒有映射到任何伺服器層級的登入的使用者,可以使用EXECUTE AS USER命令類比執行。

User mapped to a  certificate/User mapped  to an asymmetric key (映射到認證/非對稱金鑰的使用者)

通過一個簽名密鑰建立的使用者,允許映射自一個遠程實體。
Windows user (Windows使用者) 映射到Windows身分識別驗證的登入名稱的使用者。

 

3. 輸入使用者名稱,可以和登入名稱一樣,或者使用其他允許的名字,但是不能使用一些關鍵字、保留字等。選擇一個登入名稱(或者輸入映射的認證、密鑰)。然後選擇預設架構,如果沒有選擇架構,SQL Server會使用dbo作為預設架構。除了圖形化操作,還可以用下面的T-SQL實現:

USE marketing; CREATE USER [Fred] FOR LOGIN [Fred];


 

4. 如果想查詢已建立的使用者,可以用sys.database_pr\incipals目錄檢視實現:

SELECT dp.name as UserName, sp.name as LoginName, dp.default_language_name, dp.default_schema_name, dp.type_desc, dp.create_date FROM sys.database_principals dp JOIN sys.server_principals sp ON dp.sid = sp.sid WHERE dp.type IN ('S', 'U') AND dp.principal_id > 4;


 

其中1~4的principal_id為系統預設的使用者。

 

原理:

 

你可以建立不帶有登入名稱的使用者,這種情況多數用在測試過程,或者僅用於安全上下文類比(在第三章介紹)。要建立一個使用者,需要在資料庫層面上有ALTER ANY USER許可權,等於固定資料庫角色db_accessadmin,可以用GRANT ALTER ON USER::[使用者名稱] to [特定需要用於管理的登入名稱]來實現。比如:

GRANT ALTER ON USER::[Fred] TO [Mary];


代表Mary這個登入名稱有權管理Fred這個使用者。但是不給Mary過多的許可權。

 

禁用使用者:

 

和登入名稱的禁用不同,對於使用者,沒有ALTER USER XXXX DISABLE命令,在SSMS中也能看到沒有這類勾選項。另外,一些系統使用者,如guest、INFORMATION_SCHEMA,預設是禁用的。

如果要禁用使用者,必須回收其CONNECT許可權:

USE marketing; REVOKE CONNECT TO [Fred];


 

更多:

 

如果一個Windows 帳號屬於某個Windows組,並且這個組作為一個登入被添加到SQL Server中,不僅可以建立一個資料庫使用者映射到整個組,也可以建立使用者映射到單獨的Windows帳號。比如,如果DOMAIN\Fred是DOMAIN\Developers組的成員,並且這個組已經定義為SQL Server登入名稱,但是DOMAIN\Fred登入未被添加,可以單獨建立使用者並授予許可權:

CREATE USER [DOMAIN\Fred] FROM LOGIN [DOMAIN\Fred];


 

誰是dbo?

 

dbo代表Database Owner,是一個映射資料庫擁有者的特殊資料庫使用者,當建立資料庫時,所使用的登入名稱會被授予成owner,可以用下面語句查詢:

SELECT SUSER_SNAME(owner_sid), name FROM sys.databases; -- or : SELECT SUSER_SNAME(sid) FROM sys.database_principals WHERE principal_id = USER_ID('dbo');


 

 

此時,登入名稱會自動對應到dbo中,並且授予整個庫的所有許可權,可以用下面語句修改:

ALTER AUTHORIZATION ON DATABASE::marketing TO sa;


 

把資料庫marketing的owner更改給sa。這種做法在把資料庫移動到別的伺服器時,而擁有者的SID不存在,就很有用。

 

dbo使用者不能被重新命名或者刪除,也不能從db_owner角色中移除,資料庫擁有者和sysadmin伺服器角色成員會被視為資料庫的dbo使用者,邏輯上,作為資料庫擁有者會映射到dbo中,而sysadmin角色成員不需要映射,實際上,即使當sysadmin成員映射到一個資料庫的使用者是,它會被視為dbo。

 

什麼是guest使用者?

 

在每一個資料庫中,你會看到一個使用者名稱叫guest的使用者,它是一個不能移除的資料庫固定系統使用者,目的是允許沒有映射到一個使用者的登入名稱能匿名訪問資料庫。但是預設是禁用的,以防不必要訪問。從安全性角度來說,保持它的禁用是比較好的方法,如果想啟用,可以授予CONNECT許可權:

USE marketing; GRANT CONNECT TO guest;


 

可以使用下面代碼檢查guest使用者是否啟用:

SELECT CAST(IIF(dp.state IN ('G', 'W'), 1, 0) AS bit) AS [HasDBAccess] FROM sys.database_principals u LEFT JOIN sys.database_permissions dp     ON dp.grantee_principal_id = u.principal_id and dp.type = 'CO' WHERE u.name = 'GUEST';


返回1即啟用,-返回0為禁用。還可以用下面語句查看guest的許可權:

SELECT permission_name, state_desc, OBJECT_NAME(major_id) as securable FROM sys.database_permissions WHERE grantee_principal_id = USER_ID('guest');


 

使用系統函數標識使用者和登入

可以使用很多系統函數擷取使用者和登入的資訊。

SYSTEM_USER和SUSER_SNAME(),返回當前登入資訊,並包含SID。其中SUSER_SNAME()返回一個來自登入名稱或當前登入的SID,如果沒有帶有參數,在安全上下文更改時(EXECUTE AS ),會返回類比登入。

CURRENT_USER和SESSION_USER返回當前資料庫的當前內容相關的使用者名稱,USER_ID()或DATABASE_PRINCIPAL_ID()返回資料庫的principal_id,而SUSER_SID()返回SID。

可以使用下面語句列出所有可以訪問的資料庫名:

SELECT [Name] FROM sys.databases WHERE HAS_DBACCESS ([Name]) = 1   AND database_id > 4 ORDER BY [Name];


 

如果需要查詢某個使用者是否屬於Windows的群組成員,可以使用IS_MEMBER()函數:

SELECT IS_MEMBER('DOMAIN\developers');


下面是可以使用的函數既描述:

函數名 描述
SYSTEM_USER 返回當前伺服器登入名稱
SUSER_SNAME() 返回當前伺服器登入名稱
SUSER_ID() 返回當前伺服器SID
CURRENT_USER 返回當前資料庫使用者
SESSION_USER 返回當前資料庫使用者
USER_ID() 返回當前資料庫principal_id
DATABASE_PRINCIPAL_ID() 返回當前資料庫principal_id
ORIGINAL_LOGIN() 返回在環境切換錢的原始登入名稱
HAS_DBACCESS('database') 1代表當前登入可以訪問資料庫
IS_MEMBER('group') 1代表當前登入是Windows群組成員


下一篇:http://blog.csdn.net/dba_huangzj/article/details/39003679


sql建立表格是怎寫的最好有具體的樣本

DROP TABLE CELL_TCH;
DROP TABLE MS;
DROP TABLE MSC;
DROP TABLE BSC;
DROP TABLE BTS;
DROP TABLE CELL;
DROP TABLE ANTENNA;
DROP TABLE DATA;
DROP TABLE TEST;
DROP TABLE NEIGHBOR;

CREATE TABLE MSC (
MSCID INTEGER NOT NULL,
MSCNAME CHARACTER (10),
MSCCOMPANY CHARACTER (10),
MSCLONGITUDE DECIMAL (9,6),
MSCLATITUDE DECIMAL (8,6),
MSCALTITUDE INTEGER,
PRIMARY KEY ( MSCID) ) ;

CREATE TABLE BSC (
BSCID INTEGER NOT NULL,
BSCNAME CHARACTER (10),
BSCCOMPANY CHARACTER (10),
LONGITUDE DECIMAL (9,6),
LATITUDE DECIMAL (8,6),
MSCID INTEGER,
PRIMARY KEY (BSCID),
FOREIGN KEY (MSCID) REFERENCES MSC (MSCID)) ;

CREATE TABLE BTS (
BTSNAME CHARACTER (20) NOT NULL,
BSCID INTEGER NOT NULL,
LONGITUDE DECIMAL (9,6),
LATITUDE DECIMAL (8,6),
ALTITUDE INTEGER,
BTSCOMPANY CHARACTER (10),
BTSPOWER DECIMAL (2,1),
PRIMARY KEY (BTSNAME),
FOREIGN KEY (BSCID) REFERENCES BSC (BSCID)) ;

CREATE TABLE CELL (
CELLID INTEGER NOT NULL,
BTSNAME CHARACTER (20),
AREANAME CHARACTER (10),
LAC INTEGER,
LONGITUDE DECIMAL (9,6),
LATITUDE DECIMAL (8,6),
DIRECTION INTEGER,
RADIOUS INTEGER,
ANTNUM INTEGER,
BCCH INTEGER,
PRIMARY KEY ( CELLID),
FOREIGN KEY (BTSNAME) REFERENCES BTS (BTSNAME)) ;

CREATE TABLE MS (
IMEI BIGINT NOT NULL,
MSISDN BIGINT,
......餘下全文>>
 
怎設定伺服器支援jsp?

tomcat的的www.apache.org/dist/jakarta/tomcat-4/
1、安裝jdk,詳細操作請參考本站windows 2k和redhat 8.0下java環境配置

2、如何修改連接埠號碼

使用文字編輯器如EditPlus,開啟server.xml檔案,尋找到
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />

將其中的8080,改成80,然後重啟tomcat,本機使用localhost即可訪問。
註:其他版本,尋找相應的8080,然後修改。

3、修改發布目錄

例如將d:\test目錄作為自己的文檔發布目錄,並指定mytest為http訪問的相對目錄(本機即localhost/mytest)。
同上要修改server.xml檔案,找到

<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0"/>
-->
去掉注釋,或者將已經屏蔽掉的<Context path="" docBase="ROOT" debug="0"/> 複製到下面的空白處,這時候覆制的文本已經可以彩色亮顯。根據例子中的要求,修改這段文本如下:
<Context path="/mytest" docBase="d:\test" debug="0"/>
然後重......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.