如果你创建了一个登录账号,希望这个登陆账号通过Microsoft SQL Server Management Studio客户端工具登录到SQL Server时,只有查看左边目录树的权限,那么应该如何设置呢?
下面的代码,就可以实现这个功能:
1、建立数据库、登录账号、数据库用户,授予权限
--先建立2个数据库,用来做实验 create database wcc go create database ggg go
--以下代码都是在sa账户下执行的 --1.建立登录名 ggg use master go if exists(select * from sys.server_principals where name ='ggg') drop login ggg go create login ggg with password = 'ggg', default_database = [master], check_expiration = off, check_policy = off go /* 2.注意这里的ggg是登录名,授予服务器级别的查看定义权限 这样,你用ggg登录后,可以看到左边的目录树, 但是当你点击任意用户数据库,比如下面的 wcc数据库, 就会报错! */ grant view any definition to ggg /* 3.上面的登录名,那么如果你要查看某个数据库下面的目录树, 那么必须要创建挂到这个登录名上的,数据库用户名, 这里是数据库用户 ggg */ use wcc go if exists(select * from sys.database_principals where name = 'ggg') drop user ggg go create user ggg for login ggg go --这里创建一个表,用来测试权限 if OBJECT_ID('test') is not null drop table test go create table test ( id int, v varchar(10) ) insert into test(id,v) select 1,'aa' union all select 2,'bb' union all select 3,'cc' /* 4.这里的ggg是数据库用户, 给这个数据库用户ggg,授予查看数据库wcc中的任何定义信息, 这个时候,你可以点击wcc数据库左边的加号,展开目录树, 你可以看到表,视图等等,点击表,你可以看到有很多表 */ grant view definition on database::wcc to ggg
2、接下来,打开客户端工具,输入用户名:ggg 和密码:ggg,进行连接:
然后,我们点击左边的目录树,可以查看数据库wcc下面的所有信息:
但是如果你点击ggg数据库,由于没有在数据库ggg中建立对应的数据库用户ggg,所以在用登陆账号ggg登录到SQL Server后,会用当前数据库的guest数据库用户,作为登录名的数据库用户,而这个guest没有什么权限,所以导致报错:
如果我们尝试进行select查询,由于没有授予数据库用户select 权限,比如:
grant select on test to ggg
所以,下面的代码会报错:
use wcc go /* 5.需要特别注意的是,上面的权限只能是让你看看定义, 你说,我能:select * from 某个表 由于没有: grant select on 某个表 to ggg 所以会报没有权限的 */ select * from test
转载于:https://blog.51cto.com/yupeigu/1368065