日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL Server 关于列的权限控制

發(fā)布時(shí)間:2023/12/1 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 关于列的权限控制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
SQL Server 關(guān)于列的權(quán)限控制 原文:SQL Server 關(guān)于列的權(quán)限控制

??? 在SQL SERVER中列權(quán)限(Column Permissions)其實(shí)真沒(méi)有什么好說(shuō)的,但是好多人對(duì)這個(gè)都不甚了解,已經(jīng)被人問(wèn)了幾次了,所以還是在這里介紹一下,很多人都會(huì)問(wèn),我能否單獨(dú)對(duì)表的某列授權(quán)給某個(gè)用戶(hù)? 答案是可以,我們可以對(duì)表中的列授予SELECT、UPDATE權(quán)限,我們結(jié)合下面的簡(jiǎn)單案例來(lái)闡述一下可能效果更好。

??? 案例1: 在AdventureWorks2014中,登錄名UserA 只能有權(quán)限查詢(xún)[Person].[Person]里面的BusinessEntityID, NationalIDNumber, LoginID三個(gè)字段權(quán)限,不能查詢(xún)其它字段

USE [master]GOCREATE LOGIN [UserA] WITH PASSWORD=N'UserA', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFFGOUSE [AdventureWorks2014]GOCREATE?USER [UserA] FOR LOGIN [UserA]GO

給用戶(hù)授予相關(guān)列的查詢(xún)權(quán)限(SELECT)

GRANT?SELECT(BusinessEntityID, NationalIDNumber, LoginID) ON? [HumanResources].[Employee] TO [UserA]

此時(shí)你可以用下面SQL查看授予UserA的權(quán)限:

SELECT? dp.grantee_principal_id ,??????? P.name AS UName ,??????? dp.permission_name ,??????? C.name ,??????? OBJECT_NAME(O.object_id) AS TabNameFROM??? sys.database_permissions dp??????? INNER?JOIN sys.objects O ON dp.major_id = O.object_id??????? INNER?JOIN sys.columns C ON C.object_id = O.object_id??????????????????????????????????? AND C.column_id = dp.minor_id??????? INNER?JOIN sys.database_principals P ON P.principal_id = dp.grantee_principal_id;

?

以用戶(hù)UserA登錄,如下所示,如果查詢(xún)語(yǔ)句使用BusinessEntityID, NationalIDNumber, LoginID字段之外的其它字段,就會(huì)出現(xiàn)類(lèi)似下面錯(cuò)誤,當(dāng)然也不能使用SELECT *之類(lèi)的查詢(xún)語(yǔ)句。

Msg 230, Level 14, State 1, Line 8

The SELECT permission was denied on the column 'JobTitle' of the object 'Employee', database 'AdventureWorks2014', schema 'HumanResources'.

另外,也可以只授權(quán)用戶(hù)更新某個(gè)列,例如對(duì)于登錄名UserB,只允許其修改Person.Address的AddressLine1,AddressLine2兩個(gè)字段,其它字段不許修改。

GRANT?UPDATE(AddressLine1,AddressLine2) ON [Person].[Address] TO UserB;?SELECT? dp.grantee_principal_id ,??????? P.name AS UName ,??????? dp.permission_name ,??????? C.name ,??????? OBJECT_NAME(O.object_id) AS TabNameFROM??? sys.database_permissions dp??????? INNER?JOIN sys.objects O ON dp.major_id = O.object_id??????? INNER?JOIN sys.columns C ON C.object_id = O.object_id??????????????????????????????????? AND C.column_id = dp.minor_id??????? INNER?JOIN sys.database_principals P ON P.principal_id = dp.grantee_principal_idWHERE P.name='UserB'

?

另外,關(guān)于DELETE、INSERT權(quán)限,這個(gè)是沒(méi)有所謂的列權(quán)限(Column Permissions)的,其實(shí)從邏輯上想想,你也能明白,這這兩者對(duì)應(yīng)的最小單位為一條記錄,所以根本不能再細(xì)化到列級(jí)別了。

Msg 1020, Level 15, State 1, Line 36

Sub-entity lists (such as column or security expressions) cannot be specified for entity-level permissions.

posted on 2018-08-03 09:02 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/9411475.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server 关于列的权限控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。