因为某些原因需要新建一些视图, 视图是写好了,但是需要一个像SA 一样的用户,专门管理这些视图,而它不参与其他视图的任何权限,其他用户与这些视图也不染。请问有什么好的办法么? 能写成脚本么? 谢谢。希望能明白我的意思。

解决方案 »

  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'
      

  2.   

    create user
      

  3.   

    视图的话,不但要给视图授予权限, 视图里面的包含的所有的表也要有权限.如果只给表授予权限.访问视图也是不行的! 所以要给表和视图都赋予权限!--创建windows 登录账户
    create login [computer_name\alice] from windows
    with default_databse=adventureworks--创建sqlserver 登录名
    create login bob with password='P@ssWord',
    default_database=adventureworks--创建sqlserver 弱密码登录名
    create login bob with password='Password',
    default_database=adventureworks
    --创建请密码,让密码过期,首次要改密码的sqlserver登录名
    create login bob
    with password='password' must_shange,--必须更改
    default_database=adventureworks,
    check_expipation=on,                     --判断是否过期
    check_pulicy=on                           --密码复杂度
    sqlserver2005 为客户流出来了一个接口.
    解锁:alter login username with password='user1'password' unlock
    账户--本地安全策略--账户锁定阀值--(在发生以下情况之后,锁定账户)  设置为5或是3 其他人输入三次密码错误就不在让输入了
    设定多长时间也可以设置.. 账户锁定时间 缺省情况下是30分钟..这里也可以自己设置..自己进去不去...就一直进给你吧账户锁住..sa,登录点击锁定的用户..点属性--状态--这时这里就有一个sqlserver身份验证..下面登录已锁定前面的对号给去掉就可以了2000 下 创建登录名
    sp_addlogin 'demo2','123'
    go
    sp_adduser '123',demo2'
    --sa用户创建表 demo2
    create table demo2(a int)
    --切换用户demo2
    setuser 'demo2'
    我们没有为demo2授权..在默认情况下他的权利应该是非常低的
    select * from sysobjects --demo2可以看系统表...这样就有危险了..
    sql 2000下就根据报错就能看出数据库有那些表--用户没有在demo2上执行该操作的权限
    这样就告诉黑客数据库里有这张表了--sql2005
    create login demo2user
    with password='demo2',default_database=demodb
    go
    create user demo2user for login demo2user
    --且账号
    setuser 'demo2user'
    这个demo2user 是看不了系统表的..可以看到自己自带的系统表
    删除数据库就算数据库数据存在..没有权限:他也会报 无法对数据表demo2进行删除,因为他不存在.或你没有所需的权限--example
    use master 
    go
    create login demo3a
    with password='123',default_database=demodbcreate login demo3b
    with password='123',default_database=demodbuse demodb
    go
    create user demo3a for login demo3a
    create user demo3b fro login demo3b--创建无架构表
    create table table3a(a int,b int)
    go--创建一个架构
    create schema sch
    create table table3b(a int ,b int)
    gogrant select on schema::sch to demo3b --为demo3b账户 授予sch下面的所有表的权限
    set user 'demo3b'
    select * from demo3b  --前面创建demo3b的时候没有指明他属于哪个shm
    select * from sch.demo3b setuser --切换到 sa
    setuser demo3a --切换到demo3a登录名select * from sch.table3b --这里也会报错..因为还没有给sch 查询权限setuser--切换成管理员
    alter user demo3b with default_cchema=schset user demo3b
    select * from talbe3b --这个时候就不会报错了 
    grant insert,select on table1 to user1,user2
    gogrant insert,select on schema::sch
    to user1             
    gogrant alter any schema
    to user1              --这里要有sa权限才能执行
    user master  --此处必须要用master
    go
    grant control server    --可以去控制server
    to user1
    go
    create login user_kr
    with password='!C906E6D9',default_database=demo   ----创建登录名
    go
    create user user_kr for login user_kr         ----为登录名创建用户名.他默认在demo数据库下GRANT SELECT ON student TO user_kr           --为user用户名创建权限
    SETUSER 'user_kr'             --切换用户到user_krSELECT * FROM dbo.student   --查询成功
    SELECT * FROM dbo.sc         --查询失败,没有select权限SELECT 'grant select on '+NAME+' to user_kr' from sysobjects where type='u' --sql2000的写法
    SELECT 'grant select on '+NAME+' to user_kr' FROM sys.tables                --sql2005的写法SELECT 'grant select on '+NAME+' to user_kr' from sysobjects where type='u' 
    AND SUBSTRING(NAME,14,8)='20111010'
    BETWEEN '20111011' AND '20111025'
    ORDER BY NAMEsp_helptext  --查询创建数据表,数据库,视图,的脚本
    sp_helptext:显示用户定义规则的定义、默认值、未加密的 Transact-SQL 存储过程、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束、视图或系统对象(如系统存储过程)。sp_adduser 'user_kr','C906E6D9' --2000加用户名
    SELECT 'grant select on '+NAME+' to user_kr' from sysobjects where type='u' 
    AND SUBSTRING(NAME,14,8) 
    BETWEEN '20111011' AND '20111025'
    ORDER BY NAME
    --给9分就行..我看看的了9分能不能穿4个裤衩! 吼吼!吼吼
      

  4.   

    别这么说,我也是一只菜鸟!很菜很菜的菜鸟!create login demouser
    with password='demo',default_database=demodb --创建登陆帐号,
    go
    create user demo2user for login demo2user    --创建用户,创建角色--现在这个用户是public权限..现在比如想给一个视图创建查询权限. 
    --两个视图
    create view a1
    as
    select * from student
    create view a2
    as
    select student.*,c.grade from student join sc on student.sno=c.sno--赋予读取视图的权限
    GRANT SELECT ON student TO demo2user --授予这个用户读取student的权限
    GRANT SELECT ON sc TO demo2user     --授予这个用户读取sc表的权限
    GRANT SELECT ON a2 TO demo2user     --授予这个用户读取视图a2的权限--切用户
    setuser demo2user   --现在已经是demo2user登陆了
    select * from a1   --应该会报错..他没有这个视图的权限..虽然他有student表的权限select * from a2  --这应该能查到数据..他既有student读权限.又有sc表的权限.又有a2视图的权限..我不但是一只菜鸟..而且语言组织能力烂得一逼! 不知道你看懂看不懂!    
      

  5.   

    第一句 创建登陆名那里..create login 后面是demouser2
      

  6.   


    大概能懂呢,我在自己测试研究下,看看,我也百度写,希望结合下来能搞定就是 create user demo2user for login demo2user    --创建用户,创建角色这句的时候 说  demo2user 是无效登录名或您没有相应的权限。怎么回事呢?
      

  7.   

    create user demo2user for login demouser
    就OK了。我自己没仔细看。