sqlserver資料庫角色
Ⅰ 簡單問題 sqlServer中的dbo是什麼東西
DBO是每個資料庫的默認用戶,具有所有者許可權,即DbOwner
通過用DBO作為所有者來定義對象,能夠使資料庫中的任何用戶引用而不必提供所有者名稱。
比如:你以User1登錄進去並建表Table,而未指定DBO,
當用戶User2登進去想訪問Table時就得知道這個Table是你User1建立的,要寫上User1.Table,如果他不知道是你建的,則訪問會有問題。
如果你建表時把所有者指給了Dbo,則別的用戶進來時寫上Dbo.Table就行了,不必知道User1。
不光表是如此,視圖等等資料庫對象建立時也要如此才算是好。
建表、存儲過程、視圖等資料庫對象時,其對應的所有者是創建它的用戶。則除了該用戶其他登錄用戶要引用這些東東時,都要加上前綴,很是麻煩。而且,程序因此易出錯,你查來查去問題確出在這,浪費你時間。
Ⅱ 請問在SQLServer 2000中用戶和角色的區別以及對象許可權和語句許可權的區別。麻煩用規范語言作答。
/*--示例說明
示例在資料庫pubs中創建一個擁有表jobs的所有許可權、擁有表titles的SELECT許可權的角色r_test
隨後創建了一個登錄l_test,然後在資料庫pubs中為登錄l_test創建了用戶賬戶u_test
同時將用戶賬戶u_test添加到角色r_test中,使其通過許可權繼承獲取了與角色r_test一樣的許可權
最後使用DENY語句拒絕了用戶賬戶u_test對表titles的SELECT許可權。
經過這樣的處理,使用l_test登錄SQL Server實例後,它只具有表jobs的所有許可權。
--*/
USE pubs
--創建角色 r_test
EXEC sp_addrole 'r_test'
--授予 r_test 對 jobs 表的所有許可權
GRANT ALL ON jobs TO r_test
--授予角色 r_test 對 titles 表的 SELECT 許可權
GRANT SELECT ON titles TO r_test
--添加登錄 l_test,設置密碼為pwd,默認資料庫為pubs
EXEC sp_addlogin 'l_test','pwd','pubs'
--為登錄 l_test 在資料庫 pubs 中添加安全賬戶 u_test
EXEC sp_grantdbaccess 'l_test','u_test'
--添加 u_test 為角色 r_test 的成員
EXEC sp_addrolemember 'r_test','u_test'
--拒絕安全賬戶 u_test 對 titles 表的 SELECT 許可權
DENY SELECT ON titles TO u_test
/*--完成上述步驟後,用 l_test 登錄,可以對jobs表進行所有操作,但無法對titles表查詢,雖然角色 r_test 有titles表的select許可權,但已經在安全賬戶中明確拒絕了對titles的select許可權,所以l_test無titles表的select許可權--*/
--從資料庫 pubs 中刪除安全賬戶
EXEC sp_revokedbaccess 'u_test'
--刪除登錄 l_test
EXEC sp_droplogin 'l_test'
--刪除角色 r_test
EXEC sp_droprole 'r_test'
首先,做好用戶安全:
--簡單的,只允許sql的用戶訪問sql(防止利用administrator組用戶訪問)
1.企業管理器--右鍵SQL實例--屬性--安全性--身份驗證--選擇"sql server和windows"--確定
2.企業管理器--安全性--登陸--右鍵sa--設置密碼--其他用戶也設置密碼
3.刪除用戶:
BUILTIN\Administrators
<機器名>\Administrator --這個用戶不一定有
這樣可以防止用windows身份登陸SQL
4.設置進入企業管理器需要輸入密碼
在企業管理器中
--右鍵你的伺服器實例(就是那個有綠色圖標的)
--編輯SQL Server注冊屬性
--選擇"使用 SQL Server 身份驗證"
--並勾選"總是提示輸入登錄名和密碼"
--確定
--經過上面的設置,你的SQL Server基本上算是安全了.
------------------------------------------------------------------------
其次,改默認埠,隱藏伺服器,減少被攻擊的可能性
SQL Server伺服器
--開始
--程序
--Microsoft SQL Server
--伺服器網路實用工具
--啟用的協議中"TCP/IP"
--屬性
--默認埠,輸入一個自已定義的埠,比如2433
--勾選隱藏伺服器
----------------------------------------------------------------------------
--管好sql的用戶,防止訪問他不該訪問的資料庫(總控制,明細還可以控制他對於某個資料庫的具體對象具有的許可權)
--切換到你新增的用戶要控制的資料庫
use 你的庫名
go
--新增用戶
exec sp_addlogin 'test' --添加登錄
exec sp_grantdbaccess N'test' --使其成為當前資料庫的合法用戶
exec sp_addrolemember N'db_owner', N'test' --授予對自己資料庫的所有許可權
--這樣創建的用戶就只能訪問自己的資料庫,及資料庫中包含了guest用戶的公共表
go
--刪除測試用戶
exec sp_revokedbaccess N'test' --移除對資料庫的訪問許可權
exec sp_droplogin N'test' --刪除登錄
如果在企業管理器中創建的話,就用:
企業管理器--安全性--右鍵登錄--新建登錄
常規項
--名稱中輸入用戶名
--身份驗證方式根據你的需要選擇(如果是使用windows身份驗證,則要先在操作系統的用戶中新建用戶)
--默認設置中,選擇你新建的用戶要訪問的資料庫名
伺服器角色項
這個裡面不要選擇任何東西
資料庫訪問項
勾選你創建的用戶需要訪問的資料庫名
資料庫角色中允許,勾選"public","db_ownew"
確定,這樣建好的用戶與上面語句建立的用戶一樣
---------------------------------------------------------------------------
最後一步,為具體的用戶設置具體的訪問許可權,這個可以參考下面的最簡示例:
--添加只允許訪問指定表的用戶:
exec sp_addlogin '用戶名','密碼','默認資料庫名'
--添加到資料庫
exec sp_grantdbaccess '用戶名'
--分配整表許可權
GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用戶名]
--分配許可權到具體的列
GRANT SELECT , UPDATE ON table1(id,AA) TO [用戶名]
-------------------------------------------------------------------
至於具體的安全設置和理論知道,參考SQL聯機幫助