Sql server 許可權管理,sqlserver許可權管理

來源:互聯網
上載者:User

Sql server 許可權管理,sqlserver許可權管理
1、設定某一登入賬戶只能看到部分資料庫

參考 TN VIEW ANY DATABASE許可權
通過sp_addlogin建立登入名稱
–basic:使用者登陸帳號
–basic123456:使用者登陸密碼

USE masterGOexecute sp_addlogin 'basic','basic123456'

–VIEW ANY DATABASE 許可權控制是否顯示 sys.databases 和 sys.sysdatabases 視圖以及 sp_helpdb 系統預存程序中的中繼資料。
可用下面語句查詢狀態:

SELECT l.name as grantee_name, p.state_desc, p.permission_name FROM sys.server_permissions AS p JOIN sys.server_principals AS l ON   p.grantee_principal_id = l.principal_idWHERE permission_name = 'VIEW ANY DATABASE' ;GO

拒絕basic登入名稱訪問任何資料庫(看不到)
deny VIEW ANY DATABASE TO [basic];
--GRANT VIEW ANY DATABASE TO <login> 授予特定登入帳戶

若想被登入賬戶basic 看到某一資料庫如: BasicData , 執行下面的語句:

ALTER AUTHORIZATION ON DATABASE::BasicData TO [basic]

–use BasData
–這一步驟執行不了,提示已經存在basic帳號了。
–經過測試,將前面建立帳號的步驟去掉,這一語句即可正常執行。
–在資料庫BasicData裡建立資料庫basic帳號
–第一個basic為登陸名
–第二個basic為資料庫帳號
–execute sp_grantdbaccess ‘basic’,’basic’
–將TestUser帳號添加到資料庫角色為資料庫擁有者
–execute sp_addrolemember ‘db_owner’,’basic’

2、賦予、回收表的許可權
---授予使用者person對錶Person.Address的修改許可權USE AdventureWorks2008R2;GRANT UPDATE ON Person.Address TO person;GO---授予使用者person對錶Person.Address的插入許可權USE AdventureWorks2008R2;GRANT INSERT ON Person.Address TO person;GO---授予使用者person對錶Person.Address的刪除許可權USE AdventureWorks2008R2;GRANT DELETE ON Person.Address TO person; --授予使用者預存程序dbo.prc_errorlog的執行許可權GRANT EXECUTE ON dbo.prc_errorlog TO person
--回收修改USE AdventureWorks2008R2;REVOKE update ON   Person.Address FROM person;USE AdventureWorks2008R2;REVOKE alter ON   Person.Address FROM person;--回收刪除USE AdventureWorks2008R2;REVOKE delete ON   Person.Address FROM person;--回收查詢USE AdventureWorks2008R2;REVOKE select ON   Person.Address FROM person;
3、如何設定對列的許可權

一、方式一:使用視圖

將需要限制使用者只能看到特定的幾個列、設定成一個視圖,然後對這個視圖進行許可權控制

二、方式二:使用GRANT語句

1、授予相關列的查詢許可權(SELECT)

在資料庫db1中,登入名稱UserA 只能有許可權查詢 Employee表 裡面的BusinessEntityID, NationalIDNumber, LoginID三個欄位許可權,不能查詢其它欄位

GRANT SELECT(BusinessEntityID, NationalIDNumber, LoginID) ON Employee TO UserA

2、授予相關列的修改許可權(Update)

對於登入名稱UserB,只允許其修改 Address表 的AddressLine1,AddressLine2兩個欄位,其它欄位不許修改

GRANT UPDATE(AddressLine1,AddressLine2) ON Address TO UserB

4、查詢許可權

登入名表

select * from master.sys.syslogins

登入名與伺服器角色關聯表

select * from sys.server_role_members

伺服器角色表

select * from sys.server_principals

查詢登入名擁有的伺服器角色

select SrvRole = g.name, MemberName = u.name, MemberSID = u.sid
from sys.server_role_members m inner join sys.server_principals g on g.principal_id = m.role_principal_id inner join sys.server_principals u on u.principal_id = m.member_principal_id

資料庫使用者表

select * from sysusers

資料庫使用者表角色關聯表
select * from sysmembers

資料庫角色表
select * from sys.database_principals

查詢資料庫使用者擁有的角色
select ta.name as username,tc.name as databaserole from sysusers ta inner join sysmembers tb on ta.uid=tb.memberuid inner join sys.database_principals tc on tb.groupuid=tc.principal_id

查詢當前資料庫使用者關聯的登入名

 use AdventureWorks2008R2  select ta.name as loginname,tb.name as databaseusername from master.sys.syslogins ta inner join sysusers tb on ta.sid=tb.sid 

如果將當前資料庫還原到另一台伺服器執行個體上,剛好那台伺服器上也存在person登入使用者,你會發現二者的sid不一樣,
由於sid不一樣,所以登入使用者不具有當前資料庫的存取權限,我們要想辦法將二者關聯起來。

關聯登入名與資料庫使用者(將資料庫使用者的sid刷成登入名的sid)

   use AdventureWorks2008R2    EXEC sp_change_users_login 'Update_One', 'person', 'person'    Go
5、補充
USE [master]GO---建立登入名CREATE LOGIN [person] WITH PASSWORD=N'person', DEFAULT_DATABASE=[news], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFFGOUSE [news]GO---在指定的資料庫下建立和登入名相關聯的資料庫使用者CREATE USER [person] FOR LOGIN [person]GOUSE [news]GO---在指定的資料庫下授予使用者SELECT,DELETE,UPDATE,INSERT,EXECUTE許可權。GRANT SELECT,DELETE,UPDATE,INSERT,EXECUTE TO person;

參考 SQL Server 許可權管理
over.

   
0
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.