SQL Server 关于列的权限控制
在SQL SERVER中列权限(Column Permissions)其实真没有什么好说的,但是好多人对这个都不甚了解,已经被人问了几次了,所以还是在这里介绍一下,很多人都会问,我能否单独对表的某列授权给某个用户? 答案是可以,我们可以对表中的列授予SELECT、UPDATE权限,我们结合下面的简单案例来阐述一下可能效果更好。
案例1: 在AdventureWorks2014中,登录名UserA 只能有权限查询[Person].[Person]里面的BusinessEntityID, NationalIDNumber, LoginID三个字段权限,不能查询其它字段
USE [master]
GO
CREATE LOGIN [UserA] WITH PASSWORD=N'UserA', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [AdventureWorks2014]
GO
CREATE USER [UserA] FOR LOGIN [UserA]
GO
给用户授予相关列的查询权限(SELECT)
GRANT SELECT(BusinessEntityID, NationalIDNumber, LoginID) ON [HumanResources].[Employee] TO [UserA]
此时你可以用下面SQL查看授予UserA的权限:
SELECT dp.grantee_principal_id ,
P.name AS UName ,
dp.permission_name ,
C.name ,
OBJECT_NAME(O.object_id) AS TabName
FROM 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;
以用户UserA登录,如下所示,如果查询语句使用BusinessEntityID, NationalIDNumber, LoginID字段之外的其它字段,就会出现类似下面错误,当然也不能使用SELECT *之类的查询语句。
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'.
另外,也可以只授权用户更新某个列,例如对于登录名UserB,只允许其修改Person.Address的AddressLine1,AddressLine2两个字段,其它字段不许修改。
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 TabName
FROM 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
WHERE P.name='UserB'
另外,关于DELETE、INSERT权限,这个是没有所谓的列权限(Column Permissions)的,其实从逻辑上想想,你也能明白,这这两者对应的最小单位为一条记录,所以根本不能再细化到列级别了。
Msg 1020, Level 15, State 1, Line 36
Sub-entity lists (such as column or security expressions) cannot be specified for entity-level permissions.
转载于:https://www.cnblogs.com/lonelyxmas/p/9411475.html
SQL Server 关于列的权限控制相关推荐
- SQL Server 2016 行级别权限控制
背景 假如我们有关键数据存储在一个表里面,比如人员表中包含员工.部门和薪水信息.只允许用户访问各自部门的信息,但是不能访问其他部门.一般我们都是在程序端实现这个功能,而在sqlserver2016以后 ...
- SQL Server使用视图做权限控制
问题引入 这天老鸟火急火燎的跑到菜鸟旁边,想必是遇到什么难题了:"现在有这么一个场景,假如有三种角色,并且存在层级关系,他们需要访问同一个数据源表,但是需要做权限控制,使得每种角色只能看到自 ...
- sql server新增列_SQL Server 2016安装中的新增功能?
sql server新增列 SQL Server 2016 introduced officially on the 1st of June 2016. It comes with many new ...
- sql server伪列_伪简单SQL Server恢复模型
sql server伪列 This article gives an overview of the Pseudo Simple SQL Server Recovery Model. It also ...
- SQL Server 2016 列存储技术做实时分析
title: SQL Server 2016 列存储技术做实时分析 author: 风移 摘要 数据分析指导商业行为的价值越来越高,使得用户对数据实时分析的要求变得越来越高.使用传统RDBMS数据分析 ...
- sql server新增列_SQL Server 2017中的新增功能
sql server新增列 SQL Server 2017 is considered a major release in the history of the SQL Server life cy ...
- SQL Server 索引列的顺序——真的没关系吗
SQL Server 索引列的顺序--真的没关系吗 原文: SQL Server 索引列的顺序--真的没关系吗 翻译自:http://www.mssqltips.com/sqlservertip/27 ...
- SQL Server研习录(29)——sql server 设置列自增长
SQL Server研习录(29)--sql server 设置列自增长 版权声明 一.设置列自增长 1.创建表时 2.创建表后 版权声明 本文原创作者:清风不渡 博客地址:https://blog. ...
- sql server定义_在SQL Server中查看定义权限
sql server定义 We have various database objects such as view, stored procedures, triggers, functions a ...
最新文章
- 单个神经元在深度网络中的作用
- 【玩转Ubuntu】01. Ubuntu上配置JDK
- c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...
- STM32 基础系列教程 22 - CAN
- 使用HMTL5 API监控前端性能
- 鲁迅散文——狗的驳诘
- CentOS 7 yum 安装php5.6
- linux内核关闭网络巨帧xenomai,xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务...
- 手慢无!小米5G手机已抢光
- 什么是面向对象,为什么要面向对象
- ddddocr打包不成功解决办法
- 21天Jmeter打卡day9HTTP不同方法post提交表单和json
- 全国大学FTP列表!绝对经典!!!
- 5行代码识别各种验证码
- 分布式之CAP原则详解
- Linux系统安装迷你世界,迷你世界国际服下载安装
- Kalman滤波器参数分析
- js格式化日期和事件
- java 如何获取当前时间到夜晚12点的毫秒差值
- 这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构
热门文章
- 关于 Number() parsint() abs() 的区别
- centOS 阿里云yum地址配置
- python 列表 字典 读写文件:pickle模块的基本使用
- sublime text 3 前端开发常用插件
- Linux安装、卸载软件
- linux c++ 运行时报 段错误 的一个原因
- (Joomla)字符串截取
- CSS样式表的规划与组织
- cmd进入python环境_python2和python3同时存在,如何CMD中进入不同的环境
- 5. 多线程程序如何让 IO 和“计算”相互重叠,降低 latency?