Security8:删除Role 和 User
SQL Server数据库有完善的权限管理机制,对于存储过程,其权限分为查看定义,执行和修改,查看SP定义的权限是:VIEW DEFINITION ,执行存储过程的权限是:EXECUTE,修改SP的权限是:ALTER,但是该权限也能修改表结构,视图的定义等数据库对象。数据的读取权限是SELECT,这个查看定义是不同的权限。对于一个数据表,如果仅授予VIEW DEFINITION权限,而没有授予SELECT权限,那么用户只能查看数据表的结构(Schema),而无法查看表中存储的数据。
在管理权限时,可以给特定的用户授予“只能读取数据和执行SP,而不能修改数据”的权限,也就是,使特定的用户只能查看数据(只读,SELECT),只能查看定义(VIEW DEFINITION),和执行SP的权限(EXECUTE),这样的权限设置,既能使用户查看到业务数据,又能避免用户私自修改数据。
对于数据的读取权限,SQL Server内置固定数据库角色 db_datareader,把用户添加到该角色中,用户就被授予了对数据库中所有数据(表或视图)的读取权限,就是说,用户可以对数据表或视图执行select命令读取数据;也可以逆向思考,不允许用户修改数据,把用户添加到固定数据库角色 db_denydatawriter 中,这样,用户不能添加,更新和删除任何数据,就是说,不能对任何数据表执行insert,updae和delete命令。这两个数据库角色,相当于以下两个命令:
grant select to [domain\user];
deny update,delete,insert to [domain\user];
权限的分配分为:授予(grant)和拒绝(deny),对于已分配的权限,也可以通过回收(revoke)命令收回,权限管理是个技术活。
一,授予查看定义的权限
查看数据库对象的权限是VIEW DEFINITION,通常数据库对象是指:数据表,视图,存储过程,函数等,被授予VIEW DEFINITION权限之后,用户只能查看定义,而无法从数据表或视图中查看数据,无法执行SP和函数等。
1,授予SQL Server实例级别的查看定义的权限
以下代码用于授予权限VIEW ANY DEFINITION,代码必须在master数据库中执行,使指定的用户能够查看当前SQL Server实例中的所有数据库对象的定义:
use master
go
grant view any definition to [domain\user]
2,授予User,只能查看当前数据库对象的定义的权限
以下代码用于授予VIEW DEFINITION,使指定的用户能够查看指定数据库中的所有对象的定义:
use db_name
go
grant view definition to [domain\user]
3,授予User,只能查看当前数据库的指定数据库对象的定义的权限
以下代码用于授予VIEW DEFINITION,通过on子句,使指定的用户能够查看指定对象的定义:
use db_name
go
grant view definition
on object::schema_name.object_name
to [domain\user]
二,授予执行存储过程的权限
以下代码授予用户执行存储过程的权限,通过on子句指定用户只能执行特定的SP:
use db_name
go
grant execute
on object::schema_name.object_name
to [domain\user]
如果grant execute省略on子句,表示所有的SP,这样,用户可以执行数据库中的所有SP:
use db_name
go
grant execute
to [domain\user]
三,授予用户修改存储过程的权限
修改存储过程的权限是ALTER,但是,ALTER同时也能修改表结构,视图定义等数据库对象,如下代码所示:
GRANT ALTER TO [domain\user]
如果仅授予用户修改SP的权限,那么必须逐个设置,或者把SP创建在独立的schema下,通过授予用户修改schema,达到控制用户只修改SP的目的:
GRANT ALTER
ON SCHEMA::proc_schema
TO [domain\user]
四,授予用户查看SP的定义,执行和修改SP的权限
通过GRANT子句,可以一次性把查看SP的定义,执行和修改SP的权限都授予指定的用户:
GRANT ALTER, EXECUTE, VIEW DEFINITION
ON SCHEMA::[proc_schema]
TO [domain\user]
在GRANT子句中省略ON子句,表示授予用户的权限作用于所有的数据库对象,包括数据表,视图,存储过程,函数等。
五,授予Public用户查看定义的权限
当Login没有映射到相应的User时,该Login被映射到默认的Public,设置给用户查看定义的权限,这样,每个登陆到SQL Server实例的用户,都可以查看定义。
use master
go
grant view any definition to public use dbn_ame
go
grant view definition to public
六,授予用户查看定义,只读数据和执行SP的权限
存储过程 sp_msforeachdb @command 是微软未公开的存储过程,该存储过程遍历当前的SQL Server实例的所有数据库,在每个数据库中执行相同的命令:
use master
go create login [domain\user]
from windows;
go grant view any definition
to [domain\user] ;
go exec sp_msforeachdb
'
use [?];
if not exists
(
select *
from sys.database_principals
where name=''domain\user''
)
create user [domain\user]
for login [domain\user];
alter role db_datareader
add member [domain\user];
grant execute to [domain\user];
'
go
遍历数据库的功能,也可以使用游标来实现,本文不再赘述。
参考文档:
Run same command on all SQL Server databases without cursors
Granting View Definition Permission to a User or Role in SQL Server
Security8:删除Role 和 User的更多相关文章
- MariaDB Role
一.MariaDB Role介绍 MariaDB从10.0/10.1版本开始支持role. Role相当于各种权限的集合,可以给多个账户统一权限的修改直接通过修改role来实现,不需要每个账户一个一个 ...
- has_many :through VS has_and_belongs_to_many
user role has_and_belongs_to_many role.destroy: 关联表user_roles先删除记录,再role删除. has_many :through user. ...
- MVC 网站部署常见问题汇总
一:TGIShare项目是一个MVC5的网站程序,部署在了IIS上,使用的Windows验证方式,并在本机设置了计划任务定时调用某个地址执行命令.问题汇总如下: 1.Window Server 200 ...
- Hibernate一对多OnetoMany
------------------------Hibernate一对多OnetoMany 要点: 配置在一端. 1.如果是单向关联,即只在一端配置OneToMany,多端不配置ManyToOne.则 ...
- 关于Entity Framework关系配置,提示列名XXXX_Id无效的问题
问题描述 : 数据库中有两张表,如下: Member(会员)表有外键RoleId,对应的是Role(角色)表的主键Id,业务逻辑是Member表的RoleId必须与Role表的Id对应(但在设计数据表 ...
- day6面向对象
面向对象介绍(http://www.cnblogs.com/alex3714/articles/5188179.htm) 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就 ...
- hibernate 一对多、多对多的配置
一对多 <class name="Question" table="questions" dynamic-insert="true" ...
- electron 开发记录
判断是否开发环境 安装 electron-is-dev npm install electron-is-dev // main.js const isDev = require('electron-i ...
- Ansible的使用和模块化深入
Ansible配置 配置文件:/etc/ansible/ansible.cfg [default] 默认配置 inventory = /etc/ansible/hosts主机清单 library = ...
随机推荐
- SOAPUI使用教程-REST源和方法
1. 添加REST服务.源和方法 一个REST服务包含任意数量相应的路径的可用源. 资源本身可以有尽可能多的子资源;子资源路径和所有的父路径链接起来. 首先创建一个新的REST服务在您的项目. 在导航 ...
- html设置透明度
在html中,设置元素的透明度 在css相应元素中添加下面两行代码即可. filter:alpha(opacity=50); /*仅在ie中支持*/ opacity:0.5; /*不支持ie*/ op ...
- web应用和虚拟目录映射
Tip:WEB应用程序 WEB应用程序指供浏览器访问的程序,通常简称为web应用. 一个web应用由多个静态web资源和动态web资源组成,如: HTML.css.js文件 JSP文件.java程序. ...
- 【总结】C# 设置委托的机理和简要步骤
[引语]实际上,和Winform打交道的第一天呢,我们就已经接触了委托,例如当双击button产生button1_click,这个呢,是对button1点击事件的处理方法,至于委托和订阅事件,就悄悄的 ...
- Salesforce学习资料
官方文档下载网址:https://developer.salesforce.com/docs 关于Salesforce的所有官方文档都在以上的地址之中,可以进行在线预览和下载 推荐新手学习以下几本文档 ...
- CentOS 安装 gcc-c++
由于网络环境的问题,很难在线安装,可以 直接挂载安装盘文件,然后在Pacakage 中进行本地安装
- WebService创建与使用
因为项目中需要实现客户端与服务器端的数据交换,以及获取服务器端其他程序的分析结果,所以对WebService做了些简单的了解,现记录如下: 一.WebService程序编写 1. 在VS中新建空白网 ...
- 一、javascript中的类
1.找出对象的构造器----constructor/instanceof constructor是用模版实例化对象的时候附带的一个额外属性,这个属性指向创建该对象时所使用的javascript构造函数 ...
- php将html转成word文档下载
<meta charset="utf-8" /> <?php class word{ function start(){ ob_start(); echo '&l ...
- angular----关于注入HTML
后台接口返回了一个HTML字符串,要绑定到页面,第一时间想到了innerHTML... 一:先说下一般用法 //原生用法 <div id="content"></ ...