T-Sql(七)用户权限操作(grant)

原文:T-Sql(七)用户权限操作(grant)

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

  先看示例代码:

 1 --创建登录名
 2 create login text1
 3 with password='password1',
 4 check_policy =off;
 5
 6 --修改登录名
 7 alter login text1
 8 with name = test1
 9 go
10 alter login test1 disable
11
12 --修改登录名密码
13 alter login test1
14 with password='123456'
15 old_password='password1';
16
17 --删除登录名
18 drop login test1
19 ----------------
20 --创建用户
21 use AdventureWorks
22 create user user1
23 for login text1
24
25 --修改用户
26 alter user user1
27 with name=use2;
28
29 --删除用户
30 drop user user2
31
32 --查看当前数据库对应的用户
33 select USER_NAME()
34 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用户。

  示例代码:

 1 create login TestUser1
 2 with password='password1';
 3
 4 create user User1
 5 for login TestUser1
 6 with default_schema=dbo;
 7
 8 create login TestUser2
 9 with password='password2';
10
11 create user User2
12 for login TestUser2

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

  这个操作有三种方法:

    1,SQLSERVER可视化操作。

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

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

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

  我们先看一个示例代码:

1 grant all
2 on database::ExamMis
3 to User1
4 WITH GRANT OPTION

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

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

  示例代码:

1 grant select,insert,update
2 on table::student
3 to User1
4 WITH GRANT OPTION

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

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

1 EXEC sp_addrolemember N'db_owner', N'User1' 

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

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

  执行上下面到User1下:

1 EXECUTE AS LOGIN = 'TestUser1'

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

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

  示例代码:

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

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

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

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

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

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

  示例代码:

1 create role Select_Fuction  --创建角色
2
3 GRANT select
4    ON OBJECT::dbo.Select_Questions
5    TO Select_Fuction;
6
7 exec sp_addrolemember 'Select_Fuction','User2'  --将Select_Fuction角色添加到User2用户中

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

  示例代码:

1 REVERT;
2 EXECUTE AS LOGIN = 'TestUser2'
3 select USER_NAME()
4
5 select * from Select_Questions()

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

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

1 drop function Select_Questions
2 drop login TestUser1
3 drop login TestUser2
4 drop user user1
5 drop user user2

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

 1 sp_addlogin 登录名,登陆密码,默认数据库,默认语言,安全码,是否加密
 2 sp_password 旧密码,新密码,指定登录号
 3 sp_defaultdb 指定登录号,默认数据库
 4 sp_defaultlanguage 指定登录号,默认语言
 5 sp_helplogins 指定登录号
 6 sp_droplogin 指定登录号
 7
 8 -------------------------数据库用户管理---
 9 sp_grantdbaccess 登录号,数据库用户名
10 sp_helpuser 数据库用户名
11 sp_revokedbaccess 指定数据库用户名
12
13 ------------------------服务器角色--------
14 sp_addsrvrolermemeber 登陆账号名,服务器角色名
15 sp_dropsrvrolermember 登陆用户名,服务器角色名
16
17 ------------------------数据库角色---------
18
19 sp_addrole 数据库角色名,数据库角色的所有者
20 sp_droprole 数据库角色名
21
22 ------------创建数据库角色的成员----
23
24 sp_addrolemember 数据库角色名,数据库用户
25 sp_droprolemember 数据库角色名,数据库用户

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

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

  

时间: 2024-09-03 19:30:51

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

SQL 给用户权限的问题

问题描述 SQL 给用户权限的问题 开始我用默认用windows登录了进来,建了一个test数据库里面有表student. 然后新建了一个登录me,在me下新建了一个数据库UserData在UserData添加了架构medbo: 并给该数据库添加了用户mename给mename默认架构medbo数据库角色为dbo_datawriter ①现在我用me登录,在UserData下新建表st它的架构是medbo,它确实无法访问我的test数据库下面的student表,但是那现在为什么我可以访问st表呢

管理-sql建立表 进行用户权限的操作

问题描述 sql建立表 进行用户权限的操作 假如 sql设置用户权限的表这设置 比如说有"超级管理员,管理员,普通用户"这些访问和操作权限是通过什么设置的 解决方案 在你的系统中增加2个表 权限表,比如: id 操作 角色 1 addnews admin 2 addnews user 3 readnews admin 4 readnews user 5 readnews guest 6 adduser admin ... 再建立一个角色表 id userid role 1 123 ad

使用SQL语句赋予SQL Server数据库登录用户权限

server|数据|数据库|用户权限|语句 GRANT在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的 Transact-SQL 语句.语法语句权限: GRANT { ALL | statement [ ,...n ] } TO security_account [ ,...n ] 对象权限: GRANT    { ALL [ PRIVILEGES ] | permission [ ,...n ] }    {         [ ( column [ ,...n

配置Mysql用户权限命令

查看用户权限:show grants for occ@localhost; 查看用户列表:select host,user,password from user; 先对密码加密:select password('testpwd');这样执行后 会得到一串字符串 赋予用户权限:grant all on fox.* to huli@localhost identified by password '*61DE32B297DFFDD9B848CB8F21C4BC0EDA6A48E1'; 插销用户权限:

MySQL数据库下用户及用户权限配置_Mysql

问题:使用某大腿写的远程工具管理Mysql数据库时发现所有数据能正常显示,但是无法进行删除.修改等操作. 思路:可以远程读取到数据库里的信息,说明当前主机可以远程连接数据库.却无法进行删除.修改这些操作,说明某些权限并未赋予当前远程用户. 解决方法: 查看当前用户权限 show grants for username 显示当前用户下的权限为:select,insert,update,delete GRANT USAGE ON *.* TO 'username'@'host' IDENTIFIED

Mysql修改用户密码并设置用户权限

方法一, 使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数. 方法二, 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码ab12. 首先在DOS下进入目录mysqlbin,然后键入以下命令  代码如下 复制代码 mysqladmin -u root -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了. 2.再将root的密码改为djg345.  

如何从PostgreSQL源码分析哪些操作需要超级用户权限 - 阿里云rds superuser提供了哪些权限

标签 PostgreSQL , 超级用户 , superuser 背景 在数据库中哪些操作需要超级用户的权限才能执行? 这个问题翻文档可能翻不全面,或者是已经比较难以完成的任务. 但是从源码里面是比较好找出这个答案的. 权限 例如 postgres=# select * from pg_authid; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rol

PostgreSQL 从源码找出哪些操作需要超级用户权限 - 阿里云rds_superuser和superuser有什么区别

标签 PostgreSQL , 超级用户 , superuser 背景 在数据库中哪些操作需要超级用户的权限才能执行? 这个问题翻文档可能翻不全面,或者是已经比较难以完成的任务. 但是从源码里面是比较好找出这个答案的. 权限 例如 postgres=# select * from pg_authid; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rol

sql server 2005用户权限设置深入分析_mssql2005

关于什么是用户权限,最简单的定义可能是,"用户能做什么和不能做什么."在这里,简单的定义就相当不错了. 用户的权限分为3类: l 登录的权限: l 访问特定数据库的权限: l 在数据库中具体的对象上执行特定操作的权限. 既然我们已经看过了创建登录账户,这里将把重点放在登录账户能够拥有的特定权限上. 22.3.1 授予访问特定数据库的权限 如果想要一个用户可以访问数据库,你需要做的第一件事情是授予用户访问那个数据库的权限.可以在Management Studio中,通过把用户加入到服务器