sql2005设置登录名为只读权限,又设置了此登录名在指定数据库中的某个表中某个列有UPDATE修改的权限,能不能再设置对这个表中的另外列没有读取查看的权限,当然不是已经设置修改的那个列 (也就是不让这个用户名对这个表中的某个列有查看的权限,其它表和列可以读取)

解决方案 »

  1.   


    create table tb (id int, name varchar(20), address varchar(100));
    go
    insert into tb values(1,'Tom','SSt. 100');
    gocreate user [usr] without login;
    go-- 授予 [usr] 帐户对 dbo.tb 的 select 权限
    grant select on dbo.tb to [usr];
    go
    -- 授予 [usr] 帐户对 dbo.tb 的 [address] 列的 update 权限
    grant update([address]) on dbo.tb to [usr];
    go
    -- 拒绝 [usr] 帐户对 dbo.tb 的 [id] 列的 select 权限
    deny select([id]) on dbo.tb to [usr];
    go-- 测试
    exec as user='usr';
    -- 查询 name,[address] 列成功
    select name,[address], USER_NAME() username from dbo.tb;
    -- 更新 [address] 列成功
    update dbo.tb set [address]='St. 101' where name='Tom';
    -- 查询 id 列失败
    select id from dbo.tb;
    revert;
    drop table tb;
    drop user [usr];
    go