T-Sql用户权限操作(grant)
先看示例代码:
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_Questi