一般数据库的权限操作我们很少用,除非一些大型的项目,需要给数据库配置不同的用户及权限,防患于未然,今天我们就来了解下t-sql中配置用户权限操作。

  先看示例代码:

 --创建登录名
create login text1
with password='password1',
check_policy =off; --修改登录名
alter login text1
with name = test1
go
alter login test1 disable --修改登录名密码
alter login test1
with password=''
old_password='password1'; --删除登录名
drop login test1
----------------
--创建用户
use AdventureWorks
create user user1
for login text1 --修改用户
alter user user1
with name=use2; --删除用户
drop user user2 --查看当前数据库对应的用户
select USER_NAME()
SELECT CURRENT_USER AS 'Current User Name';

  这些语法都很简单我们主需要记住就行,当然通过SQLSERVER的可视化界面也可以配置。

  下面我们也通过一个实例来理解和运用配置用户权限。

  实例要求:

    1.建立两个用户,user1,user2
    2.user1具有操作数据库ExamMis的所有权限
    3.转换上下文到USer1下,建立一个函数:f_GetQuestionDetails,该函数返回题目内容(包括题干,分题项,题型三个表的关联内容)
    4.赋权限给user2:让其只具有执行该函数的权限;
    5.转换上下文到user2,执行函数调用。

1,建立两个用户,user1,user2

  创建两个登陆名,并在为登陆名创建user1和user2用户。

  示例代码:

 create login TestUser1
with password='password1'; create user User1
for login TestUser1
with default_schema=dbo; create login TestUser2
with password='password2'; create user User2
for login TestUser2

2,user1具有操作数据库ExamMis的所有权限

  这个操作有三种方法:

    1,SQLSERVER可视化操作。

    2,grant all去给用户分配权限。

    3,通过SQLSERVER系统自带的存储过程分配权限。

  这里我们先讲一下grant的用法,grant是用来给用户分配权限用的。

  我们先看一个示例代码:

 grant all
on database::ExamMis
to User1
WITH GRANT OPTION

  这段代码的意思就是给User1分配具有操作ExamMis数据库的一切权限。all关键字的意思是所有权限,也可以指定某一权限,比如查询权限就可以写grant select,

  当然 on 后面也可以是表,函数,存储过程,视图等。

  示例代码:

 grant select,insert,update
on table::student
to User1
WITH GRANT OPTION

  这段代码的意思是给用户user1在student表分配具有查询,插入,更新的权限,但是没有删除得权限。

  通过SQLSERVER系统自带的存储过程分配权限,示例代码:

 EXEC sp_addrolemember N'db_owner', N'User1' 

  sp_addrolemember是系统自带的存储过程,db_owner的意思是所有者,可视化操作的时候我们也会看到。当然还有一些其他的一些存储过程,在文章的后面会给大家整理出来。

3,转换上下文到User1下,建立一个函数:f_GetQuestionDetails

  执行上下面到User1下:

 EXECUTE AS LOGIN = 'TestUser1'

  我们可以通过select USER_NAME(); 来查看当前用户名。

  下面我们创建函数:f_GetQuestionDetails,函数具有返回值,返回table。

  示例代码:

 create function Select_Questions()
returns table
as
return
(
select t1.*,t2.TypeName,t2.Score,t3.SelectionNo,t3.SelectionTitle,t3.IsAnswer from dbo.Questions t1
inner join dbo.QuestionType t2 on t1.TypeNo=t2.[no]
inner join dbo.QuestionSelections t3 on t1.[no]=t3.QuestionNo
);

  函数的用法很简单,就不单列去讲解了,和我们编程时候用的方法类似,只是语法不同而已,大家熟悉用就行。

4,函数赋权限给user2:让其只具有执行该函数的权限;

  这一步我们可以直接用上面提到的grant去给用户user2分配权限。

  这里我们就多做一部,创建一个角色,然这个角色具有操作这个函数的权限,然后把角色分配给用户user2。

  一般我们项目的权限管理都是这个设计:用户->角色->权限。

  示例代码:

 create role Select_Fuction  --创建角色

 GRANT select
ON OBJECT::dbo.Select_Questions
TO Select_Fuction; exec sp_addrolemember 'Select_Fuction','User2' --将Select_Fuction角色添加到User2用户中

5.转换上下文到user2,执行函数调用。

  示例代码:

 REVERT;
EXECUTE AS LOGIN = 'TestUser2'
select USER_NAME() select * from Select_Questions()

  REVERT;的意思是切换上下文。

   执行完操作我们把登陆名,用户名删掉:

 drop function Select_Questions
drop login TestUser1
drop login TestUser2
drop user user1
drop user user2

用户权限配置系统存储过程

 sp_addlogin 登录名,登陆密码,默认数据库,默认语言,安全码,是否加密
sp_password 旧密码,新密码,指定登录号
sp_defaultdb 指定登录号,默认数据库
sp_defaultlanguage 指定登录号,默认语言
sp_helplogins 指定登录号
sp_droplogin 指定登录号 -------------------------数据库用户管理---
sp_grantdbaccess 登录号,数据库用户名
sp_helpuser 数据库用户名
sp_revokedbaccess 指定数据库用户名 ------------------------服务器角色--------
sp_addsrvrolermemeber 登陆账号名,服务器角色名
sp_dropsrvrolermember 登陆用户名,服务器角色名 ------------------------数据库角色--------- sp_addrole 数据库角色名,数据库角色的所有者
sp_droprole 数据库角色名 ------------创建数据库角色的成员---- sp_addrolemember 数据库角色名,数据库用户
sp_droprolemember 数据库角色名,数据库用户

  t-sql中的用户权限配置就讲到这,这一部分的内容我们很少去涉及,但是还是了解一些,说不准哪天DB不在,经理让你去配数据库用户呢,编程的都不会,就你会,自己是不是很有面子啊。哈哈。

  以后继续整理一下编程相关的知识,请大家多多关注。。。

  

T-Sql(七)用户权限操作(grant)的更多相关文章

  1. mysql用户权限操作

    mysql用户权限操作1.创建用户mysql -urootcreate database zabbix default charset utf8;grant all on zabbix.* to za ...

  2. 转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)

    相关参考资料: MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. gr ...

  3. mysqli用户权限操作

    此操作指令在 mysql 的数据库中 所以要 use mysql 查询mysqli中所有用户的权限 select host,user form user;  添加用户 grant all privil ...

  4. MYSQL用户权限管理(Grant,Revoke)

    MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL指令Grant(分配权限)和Revoke(回收权限)来实现. Grant可以把指定的权限分配给特定的用户,如果这个用户不存在 ...

  5. MySQL 赋予用户权限(grant %-远程和localhost-本地区别)

    不过有些时候(有些版本)'%'不包括localhost,要单独对@'localhost'进行赋值,这事真让我遇上了,在对mysql5.1.32建立远程用户时. 分别对'%'和'localhost'授权 ...

  6. [MySQL]查看用户权限与GRANT用法

    摘自:http://apps.hi.baidu.com/share/detail/15071849 查看用户权限 show grants for 你的用户 比如:show grants for roo ...

  7. MYSQL用户权限管理GRANT使用

    http://yanue.net/post-97.html GRANT语句的语法: mysql> grant 权限1,权限2,-权限n on 数据库名称.表名称 to 用户名@用户地址 iden ...

  8. django用户权限操作

    第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增 chioces , per_method , argument_list # 用户权限# 建立一个权限表,将映射关系存 ...

  9. MongoDB用户权限操作语法及示例

    1.创建用户 1.1.语法格式: 1.1.1.格式及例子 >db.createUser( { user: "<name>", pwd: "<cle ...

随机推荐

  1. 输入/输出系统的四种不同工作方式对CPU利用率比较

    程序控制工作方式:输入/输出完全由CPU控制,整个I/O过程中CPU必须等待其完成,因此对CPU的能力限制很大,利用率较低 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再 ...

  2. Android带边框表格的实现

    最近做项目需要用到表格,数据是动态指定的,本来用GridView是很方便的,可是老大不同意用这么重量级的控件,想办法吧. 做表格很容易想到用TableLayout,那就自定义一个来搞. 一.表格最蛋疼 ...

  3. 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行

    一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...

  4. lucene和es总结

    一.首先介绍lucene涉及到的排序过程 1.1.如何自定义排序对象 你可以自定义collector对象: 亦可以自定义comparator对象: 可以自定义scoredoc对象,决定如何处理结果集合 ...

  5. JVM中对象的销毁

    1.可达性分析算法: 可达性分析算法用来寻找将要销毁的对象,它的基本思路是:通过一系列的称为“GC ROOTs”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC ...

  6. php中htmlspecialchars()函数和addslashes()函数的使用和区别

    在防止被注入攻击时,常会用到两个函数:htmlspecialchars()和addslashes()函数.这两个函数都是对特殊字符进行转义. 1)addslashes()作用及使用 addslashe ...

  7. Ubuntu 安装Theano

    参考:http://deeplearning.net/software/theano/install_ubuntu.html 编译安装python3.4:http://blog.aboutc.net/ ...

  8. PHP基础知识之对象复制

    对象的复制默认为浅复制 进行深复制的方法为:在类中定义魔法方法__clone(),类的对象复制时,会自动调用 __clone方法,在 __clone方法中可以进行各种复制对象的个性化 class My ...

  9. 可在广域网部署运行的QQ高仿版 -- GGTalk总览

     (最新版本:V5.5,2016.12.06  增加对MySQL数据库的支持.) (android移动端:2015.09.24 最初发布 ,2016.11.25 最后更新) GGTalk(简称GG)是 ...

  10. Hadoop学习笔记—14.ZooKeeper环境搭建

    从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooK ...