日期:2014-05-18 浏览次数:20646 次
创建角色,用户,权限 /*--示例说明 示例在数据库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'
------解决方案--------------------
create user
------解决方案--------------------
视图的话,不但要给视图授予权限, 视图里面的包含的所有的表也要有权限.如果只给表授予权限.访问视图也是不行的! 所以要给表和视图都赋予权限!
--创建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=demodb create login demo3b with password='123',default_database=demodb use 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) go grant 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=sch set user demo3b select * from talbe3b --这个时候就不会报错了 grant insert,select on table1 to user1,user2 go grant insert,select on schema::sch to user1 go grant 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