原文:https://blog.csdn.net/hfdgjhv/article/details/83834076

https://www.cnblogs.com/shi-yongcui/p/7755521.html

https://www.cnblogs.com/accumulater/p/6158387.html

https://www.cnblogs.com/xwdreamer/archive/2012/06/25/2562828.html

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/grant-transact-sql?view=sql-server-2017

Grant命令:同意,授予==>授权;为主体授予安全对象的权限。

  1. GRANT 1】<某种权限> ON 2】<某个对象> TO 3】<某个用户、登录名或组> [WITH GRANT OPTION]

适用于: SQL Server(从 2008 开始)

其中:

【1】<某种权限>称为“安全对象的权限”,【2】<某个对象>称为“安全对象”,【3】<某个用户、登录名或组>称为“主体”

【1】<某种权限>是由【2】<某个对象>决定的:不同安全对象拥有不同的权限

安全对象 权限
数据库 BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE 和 CREATE VIEW
标量函数 EXECUTE 和 REFERENCES(参考文献)
表值函数 DELETE、INSERT、UPDATE、SELECT 和 REFERENCES(参考文献)
存储过程 EXECUTE
DELETE、INSERT、UPDATE、SELECT 和 REFERENCES(参考文献)
视图 DELETE、INSERT、UPDATE、SELECT 和 REFERENCES(参考文献)

 Deny命令:否认,拒绝==>禁用;为主体禁用安全对象的权限。

  1. Deny 1】<某种权限> ON 2】<某个对象> TO 3】<某个用户、登录名或组> [CASCADE]

适用于: SQL Server(从 2008 开始)

其余同Grant命令。

Revoke命令:撤销,取消==>取消;从主体中取消已有安全对象的权限

  1. Revoke 1】<某种权限> ON 2】<某个对象> From 3】<某个用户、登录名或组>

适用于: SQL Server(从 2008 开始)

其余同Grant命令。

 实例:在Sql Server 2012上添加一个登陆用户test,使其只能查询某个数据库temp的某两张表[dbo].[T_DD_OP201],[dbo].[T_DD_OP202]

分析:要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权:1.获得准许连接 SQL Server 服务器的权利;2. 获得访问特定数据库中数据的权利(select, update, delete, create table ...)。

备注:操作时必须有管理员的权限

1.在当前数据库temp中创建数据库角色testrole

  1. exec sp_addrole '角色名'
  1. exec sp_addrole 'testrole'

2. 给数据库角色testrole分配权限,使其只能查询两张表

  1. GRANT 权限 ON 表名 TO 角色名
  1. GRANT SELECT ON dbo.T_DD_OP201 TO testrole
  1. GRANT SELECT ON dbo.T_DD_OP202 TO testrole
  1.  

3.创建登陆用户

  1. exec sp_addlogin '登陆用户名','登陆用户密码','登陆用户默认数据库'
  1. exec sp_addlogin 'test','test123456','temp'

这时候,test登陆帐户就可以连接到 SQL Server 服务器上了。但是此时还不能访问数据库中的对象。要使 test帐户能够在temp数据库中访问自己需要的对象, 需要在数据库temp中建立一个“数据库用户”,赋予这个“数据库用户” 某些访问权限,并且把登陆帐户test和这个“数据库用户” 映射起来

4.创建数据库用户

  1. exec sp_adduser '登录用户名','数据库用户名','数据库角色'【将Sql Server '登陆用户名'账户添加到具有'数据库用户名'的账户的当前数据库中,并将'数据库用户名'账户添加到'数据库角色'中】
  1. exec sp_adduser 'test','dbtestname','testrole'

备注:将 SQL Server 登录名test添加到具有用户名dbtestname的当前数据库,并将数据库用户dbtestname添加到testrole数据库角色中。这样,登陆用户和数据库用户就关联起来了,当登陆用户登录后就可以访问所有与它关联的数据库用户所在的数据库中的数据。

习惯上,“数据库用户名” 和 “登陆用户名”的名字相同,即以上语句可以改为

  1. exec sp_adduser 'test','test','testrole'

实例:数据库用户、角色、登录的删除操作

1.从数据库角色中删除用户

  1. EXEC sp_droprolemember 'testrole', 'dbtestname'

备注:需有管理员的权限,并在当前数据库中执行

2.删除当前数据库用户

  1. EXEC sp_revokedbaccess 'dbtestname';

3.删除数据库角色

  1. EXEC sp_droprole 'testrole'

4.删除数据库登录

  1. EXEC sp_droplogin 'test'

实例:在执行“EXEC sp_droplogin 'test'”删除登陆名时发生错误:无法删除登录名 '***',因为该用户当前正处于登录状态。 (Microsoft SQL Server,错误: 15434)

1.首先执行:EXEC sp_who 查出用户进程的spid,

2.然后执行:kill spid

3.最后执行:sp_droplogin ‘用户名’

sql server 授权相关命令的更多相关文章

  1. SQL Server授权购买简单介绍

    SQL Server授权购买简单介绍 之前有同事问我,使用盗版序列号的SQL Server到底有没有性能限制,之前本人一直没有深入研究过,后来经过一番资料搜集和查证,汇总成这篇文章 微软的SQL Se ...

  2. 在SQL中有时候我们需要查看现在正在SQL Server执行的命令

    在SQL中有时候我们需要查看现在正在SQL Server执行的命令.在分析管理器或者Microsoft SQL Server Management Studio中,我们可以在"管理-SQL  ...

  3. 在SQL Server中使用命令调用SSIS包

    在SQL Server中可以使用dtexec命令运行SSIS包(2005以上版本),当然也可以通过系统过程:xp_cmdshell调用dtexec运行SSIS包. 具体操作步骤如下: 1.首先,当然是 ...

  4. SQL Server 日期相关

    原文:SQL Server 日期相关 原帖出处:http://blog.csdn.net/dba_huangzj/article/details/7657979 对于开发人员来说,日期处理或许简单,或 ...

  5. 详解SQL Server数据修复命令DBCC的使用

    严重级别为 21 表示可能存在数据损坏. 可能的原因包括损坏的页链.损坏的 IAM 或该对象的 sys.objects目录视图中存在无效条目. 这些错误通常由硬件或磁盘设备驱动程序故障而引起. MS ...

  6. SQL SERVER: 合并相关操作(Union,Except,Intersect)

    SQL SERVER: 合并相关操作(Union,Except,Intersect) use tempdb create table tempTable1 (id int primary key id ...

  7. SQL Server中bcp命令的用法以及数据批量导入导出

    原文:SQL Server中bcp命令的用法以及数据批量导入导出 1.bcp命令参数解析 bcp命令有许多参数,下面给出bcp命令参数的简要解析 用法: bcp {dbtable | query} { ...

  8. SQL SERVER 复制相关存储过程

    适用于所有类型复制的过程 过程 说明 sp_addscriptexec 向发布的所有订阅服务器发布 Microsoft SQL Server 脚本(.sql 文件). sp_adjustpublish ...

  9. SQL Server 2000 ——DBCC命令

    http://blog.163.com/ruifeng_00/blog/static/6904584200971291923462/   一.定义 微软当初从SYBASE将DBCC是作为数据库一致性检 ...

随机推荐

  1. shell学习第一弹-初识

    1.shell简介: shell是系统的用户界面,提供了用户与内核进行交互的一种接口.可以看做是用户与内核之间的一扇窗户.它接收用户输入的命令并把它送入内核执行. 常见的有bash,tcsh,csh, ...

  2. (转)RabbitMQ学习之安装

    http://blog.csdn.net/zhu_tianwei/article/details/40832185 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客 ...

  3. load 调用的顺序

    主要是依赖关系. 调用的顺序 你过去可能会听说过,对于 load 方法的调用顺序有两条规则: 父类先于子类调用 类先于分类调用 这种现象是非常符合我们的直觉的,我们来分析一下这种现象出现的原因. 第一 ...

  4. Redmine 甘特图导出 PDF 和 PNG 中文乱码问题

    Redmine使用了RMagick来处理图片,fpdf处理PDF,并在调用时设定了字体PDF中文字体 redmine 中关于PDF字体设置的代码 case pdf_encoding           ...

  5. 关于TCP中对于ACK报文是否需要确认的理解

    首先,TCP是一个面向字节流的协议,它不会对自己的内容做出任何的解释,也不需要做出解释,具体的解释由上层的协议来处理. 其次,TCP是一个面向字节流的协议,它会对它发送的每一个字节负责,确保每一个字节 ...

  6. 死磕itchat源码--content.py

    content.py中定义了接受消息的类型,即,用于注册消息函数时的参数类型.源码如下: TEXT = 'Text' MAP = 'Map' CARD = 'Card' NOTE = 'Note' S ...

  7. 在asyncio 中跳出正在执行的task

    需求描述 代码在asyncio的框架中运行, 但是一旦一个task出现了长时间的堵塞,我们要跳过这个task(代码可能是用户输入的,例如用户编写的插件) 代码如下 (其中大部分代码出自官方的 asyn ...

  8. Project Euler 38 Pandigital multiples

    题意: 将192分别与1.2.3相乘: 192 × 1 = 192192 × 2 = 384192 × 3 = 576 连接这些乘积,我们得到一个1至9全数字的数192384576.我们称192384 ...

  9. POJ 2115 C Looooops( 简单拓欧 + 快速幂 )

    链接:传送门 题意:题目中给出一个循环 for (variable = A; variable != B; variable += C) ,这个东东还需要 mod 2^k 问至少多次能退出,如果进入死 ...

  10. NOIP2016 DAY2 T1 组合数问题

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...