SQLServer权限
用戶的權限分為3類:
l?登錄的權限;
l?訪問特定數據庫的權限;
l?在數據庫中具體的對象上執行特定操作的權限。
?
用戶分為?服務器登陸與數據庫用戶,兩者進行關聯
角色分為:
服務器角色(固有,不可刪改,不可增加自定義);
數據庫角色(固有,不可刪改、可增加自定義角色);
?
查詢所有用戶:
select?*?from?sysusers;(數據庫用戶)
select?*?from?master.dbo.syslogins;(登陸用戶)
?
查詢賬戶信息;
sp_helplogins?'TestAccount';
?
添加一個用戶:
方法一:
exec?sp_addlogin?'test','123'?;--//創建一個登錄帳號
execute?sp_addgroup?'testgroup'?;--//創建一個組
execute?sp_adduser?'test','123','testgroup';--//把帳號添加到組中
?
方法二:
--?添加服務器登陸?
EXEC?master.dbo.sp_addlogin?@loginame?=?N'logintest',?@passwd?=?'111',?
@defdb?=?N'DBTEST',?@deflanguage?=?N'簡體中文'
--設置登陸的角色
EXEC?master..sp_addsrvrolemember?@loginame?=?N'logintest',?@rolename?=?N'sysadmin'
GO
--一個登陸
--可以在多個數據庫上創建用戶
--但不能在一個數據庫上創建多個用戶
--為登錄?logintest?在數據庫?dbtest?中添加安全賬戶?usertest
use?dbtest
go
EXEC?dbo.sp_grantdbaccess?@loginame?=?N'logintest',?@name_in_db?=?N'usertest'
--?為用戶設置數據庫角色
--?sp_addrole可以添加自定義的數據庫角色
EXEC?sp_addrolemember?N'db_datareader',?N'usertest'
GO
EXEC?sp_addrolemember?N'db_datawriter',?N'usertest'
GO
--以上設置用戶logintest只能登陸dbtest數據庫,但是我們卻可以訪問master,pubs等數據庫
--這是因為,那些數據庫里有個guest用戶,guest用戶可以與沒有設置用戶的登陸名關聯
--即logintest在master庫上沒有設置關聯用戶,就使用了guest用戶
--?刪除數據庫用戶?,刪除登陸前必須刪除登陸的所有數據庫用戶
IF?EXISTS?(SELECT?*?FROM?dbo.sysusers?WHERE?name?=?N'usertest')
EXEC?dbo.sp_revokedbaccess?N'usertest'
go
--?刪除登錄?,刪除登陸前必須刪除登陸的所有數據庫用戶
IF?EXISTS?(SELECT?*?FROM?master.dbo.syslogins?WHERE?name?=?N'logintest')
EXEC?master.dbo.sp_droplogin?@loginame?=?N'logintest'
go
----自定義角色的做法
--創建角色?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?server?2005里可以有create用法
USE?[master]
GO
CREATE?LOGIN?[logintest]?WITH?PASSWORD=N'111111',?DEFAULT_DATABASE=[master],?CHECK_EXPIRATION=OFF,?CHECK_POLICY=ON
GO
USE?[db]
GO
CREATE?USER?[logintest]?FOR?LOGIN?[logintest]
GO
USE?[db]
GO
EXEC?sp_addrolemember?N'db_denydatareader',?N'logintest'
GO
USE?[db]
GO
EXEC?sp_addrolemember?N'db_denydatawriter',?N'logintest'
GO
--服務器角色
添加系統管理員:
master.dbo.xp_cmdshell'?net?user?liujiayu?123456?/add?';
master.dbo.xp_cmdshell'?net?localgroup?administrators?liujiayu?/add
出現錯誤執行:
;EXEC?sp_configure?'show?advanced?options',?1?--?
;RECONFIGURE?WITH?OVERRIDE?--?
;EXEC?sp_configure?'xp_cmdshell',?1?--?
;RECONFIGURE?WITH?OVERRIDE?--?
;EXEC?sp_configure???'show?advanced?options',?0?--?
?
?
?
?
?
各種錯誤的總結:
?
grant?關鍵字?'to'?附近有語法錯誤
sql?server?2005?開發版
輸入語句
grant?select
on?table?person
to?ma
消息:消息?156,級別?15,狀態?1,第?3?行
關鍵字?'to'?附近有語法錯誤。
正解:
grant?select
on?person
to?ma
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的SQLServer权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sql常见函数大全
- 下一篇: SQL Server在存储过程中编写事务