问题1:查找数据库的所有角色及删除角色
我知道删除是:
exec  sp_droprole  'roleName'
但是我不会遍历
问题2:查找数据库所有用户并删除指定用户
若答案为:
if user_id('user1') is not null
  drop user user1
那么会有问题:
user1拥有架构,不能删除。
所以问题是要删除所有架构所有进为username的架构,然后才能删除数据库用户。

解决方案 »

  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'--假设你的用户为bb --1. 报告孤立用户 
    USE db 
    EXEC sp_change_users_login 'Report' 
    GO 
    --2. 处理孤立用户 
    USE db 
    EXEC sp_change_users_login 'Auto_Fix','bb',null,'bb'本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/20/4573398.aspx
      

  2.   

    sp_droprole
    从当前数据库删除 Microsoft® SQL Server™ 角色。语法
    sp_droprole [ @rolename = ] 'role'参数
    [@rolename =] 'role'将要从当前数据库中删除的角色的名称。role 的数据类型为 sysname,没有默认值。role 必须已经存在于当前的数据库中。返回代码值
    0(成功)或 1(失败)结果集
    列名 数据类型 描述 
    Name sysname 角色现有成员的名称。 
    注释
    使用 sp_droprole 只能删除标准的用户角色。若要删除应用程序角色,请使用 sp_dropapprole。不能删除仍然带有成员的角色。在删除角色之前,首先必须从该角色删除其所有的成员。若要从角色删除用户,请使用 sp_droprolemember。如果任何用户仍然为角色的成员,那么 sp_droprole 将显示这些成员。不能删除固定角色及 public 角色。如果角色还拥有任何对象,那么就不能将其删除。请在删除角色之前先删除对象,或者,对于那些不允许删除的对象,请使用 sp_changeobjectowner 更改其所有者。不能在用户定义的事务内执行 sp_droprole。
      

  3.   

    SP_MSFOREACHDB
    循环每个数据库可以用这个
      

  4.   

    问题1,好像没办法遍历问题2,user1拥有架构的情况下,一般是将架构的所有者换成其他人,而不是删除架构