您的位置:首页 > 数据库

设置登录账号只有查看Microsoft SQL Server Management Studio左边目录树的权限

2013-10-13 14:02 537 查看
 

如果你创建了一个登录账号,希望这个登陆账号通过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




 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐