sqlserver2008里面 datareader账号怎么控制只能访问指定的用户数据库,其他数据库不能访问,包括系统数据库如master以及master相关的系统表

解决方案 »

  1.   

    这是sql server本身已定义这个角色只能读数据,不需要我们再做什么控制。 这角色已经定义好的
      

  2.   

    1、datareader 不可改
    2、master库是默认可读的,有很多操作必须去读取master,
    如果你有这种要求,而且找不到其他替代方案,只能单独grant一些所需权限给那个帐号
      

  3.   

    这个datareader是值,你只有select的权限。你其实应该限制登录名,只在指定的数据库中有数据库用户,就可以了。做了一个实验,你看看:--1.创建数据库
    create database test1
    go--2.创建登录名
    create login [test_login]   
    with password = 'test_login',    --密码
         default_database = [test1]use test1
    go
         
    --3.创建数据库用户:test_login
    create user test_login for login test_login   
    go
    --4.把数据库用户test_login加入到 db_datareader数据库角色中
    exec sp_addrolemember   
        @rolename = 'db_datareader',  
        @membername = 'test_login' 
    go
    --5.建表
    create table tt(id int,v varchar(10))insert into tt
    values(1,'a')   
     然后,用新的login登录:
    然后,我点击了一下pub是数据库的加号,弹出窗口报错:
    能点击master数据库,master数据库下有很多表,但是从下面的图中我们可以看到,一个表都没有,说明也访问不到master数据库里的数据:
    而原来的master下有很多表:
    最后,我们点击test1数据库,执行如下命令:--1.
    select *
    from tt
    /*
    id v
    1 a
    */
    --2.
    delete from tt
    /*
    消息 229,级别 14,状态 5,第 1 行
    拒绝了对对象 'tt' (数据库 'test1',架构 'dbo')的 DELETE 权限。*/
      

  4.   

    Use DATABASE
     
    --创建角色 
    create role ProgramerRole 
     
    --用于创建表 视图 ,不允许创建存储过程
    grant create table,create view to ProgramerRole 
     
    --execute用以执行存储过程,alter用以修改视图, 
    --有对表的基本操作,select,update,insert
    grant select,insert,update,delete,execute,alter on schema::dbo to ProgramerRole 
     
    --创建登录账号,用来登录用 
    create login feimao with password='123456' 
    --创建数据库用户 
    create user feimao for login feimao --将用户feimao添加到ProgramerRole角色中 
    exec sp_addrolemember 'ProgramerRole','feimao' 
    exec sp_addrolemember 'db_datareader','feimao'   --只有读取某个数据库的权限