SQL SERVER如何新建一个登陆用户,该用户只能查看某一库中的某一个表?
如数据库aa中有一个a表、b表,
新建用户testA,只能查询aa库中的a表,不能查询查询b表,并且不能对a表执行更新、删除,插入操作,只能执行select 

解决方案 »

  1.   


    ---梁哥的经典代码创建角色,用户,权限/*--示例说明
            示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的SELECT权限的角色r_test
        随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
        同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
        最后使用DENY语句拒绝了用户账户u_test对表titles的SELECT权限。
        经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
    --*/USE pubs--创建角色 r_test
    EXEC sp_addrole 'r_test'--授予 r_test 对 jobs 表的所有权限
    GRANT ALL ON jobs TO r_test
    --授予角色 r_test 对 titles 表的 SELECT 权限
    GRANT SELECT ON titles TO r_test--添加登录 l_test,设置密码为pwd,默认数据库为pubs
    EXEC sp_addlogin 'l_test','pwd','pubs'--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
    EXEC sp_grantdbaccess 'l_test','u_test'--添加 u_test 为角色 r_test 的成员
    EXEC sp_addrolemember 'r_test','u_test'--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
    DENY SELECT ON titles TO u_test/*--完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/--从数据库 pubs 中删除安全账户
    EXEC sp_revokedbaccess 'u_test'--删除登录 l_test
    EXEC sp_droplogin 'l_test'--删除角色 r_test
    EXEC sp_droprole 'r_test'小梁写的用户权限的语句 USE tempdb 
    GO --创建两个测试表 
    CREATE TABLE tb1(id int,value int) 
    INSERT tb1 VALUES(1,10) CREATE TABLE tb2(id int,value int) 
    INSERT tb1 VALUES(1,10) GO 
    --创建登录 
    CREATE LOGIN Liang WITH PASSWORD='[email protected]'; --创建用户 
    CREATE USER Liang FROM LOGIN Liang; --授予用户对tb1有UPDATE某个列的权限,tb2只有SELECT权限 GRANT UPDATE(value) ON tb1 TO Liang 
    GRANT SELECT ON tb1 TO Liang 
    GRANT SELECT ON tb2 TO Liang GO --模拟用户Liang对tb1表进行UPDATE 
    EXECUTE AS USER='Liang' 
        UPDATE tb1 SET 
            value=20 
        WHERE id=1 
        
    REVERT SELECT * FROM tb1 /* 
    id          value 
    ----------- ----------- 
    1          20 (1 行受影响) */ --模拟用户Liang对tb2表进行UPDATE 
    EXECUTE AS USER='Liang' 
        UPDATE tb2 SET 
            value=20 
        WHERE id=1 
        
    REVERT /* 
    消息 229,级别 14,状态 5,第 23 行 
    拒绝了对对象 'tb2' (数据库 'tempdb',架构 'dbo')的 UPDATE 权限。 */ GO 
    --删除测试 
    DROP TABLE tb1,tb2 
    DROP USER Liang 
    DROP LOGIN Liang 
      

  2.   


    use master
    gosp_addlogin 'testa','pwd','aa'
    gouse aa
    go
    EXEC sp_adduser 'testa'
    goGRANT SELECT
    ON a
    TO testa
      

  3.   

    先建用户,再给用户分配权限1:服务器---安全性--登录---(右键)新建登录testa--数据库选项卡(许可aa数据库)2:aa数据库中--用户---右键点用户名称testa--点(权限)按钮---在A表的select 上面打√
      

  4.   

    3个步骤轻松搞定
    --3个步骤
    --添加登录 testA,设置密码为123,默认数据库
    EXEC sp_addlogin 'testA','123'--为登录 testA 在当前数据库添加访问权限(在aa数据库执行该操作)
    EXEC sp_grantdbaccess 'testA','testA'--给a表select权限
    grant select on a to testA