代码之家  ›  专栏  ›  技术社区  ›  rickythefox

为SQL Server 2005中的数据库角色成员身份生成脚本

  •  12
  • rickythefox  · 技术社区  · 15 年前

    我有一个数据库,里面有很多用户。这些用户属于数据库中不同的内置角色(如db-ddladmin)。

    我想生成一个脚本,创建具有相同角色分配的相同用户,以便在不同的数据库中使用。SQL Management Studio似乎只为用户定义的角色生成sp addrolemember调用,而不是内置角色。有没有办法让它编写所有角色的脚本?

    也许还有其他更好的工具可以从现有数据库生成数据库脚本(最好是,但不一定是免费的)?

    3 回复  |  直到 10 年前
        1
  •  21
  •   Chris    10 年前

    有关数据库用户及其分配的角色的信息在系统视图中可用。 sys.database_principals和sys.database_role_成员。通过以下查询查看此数据:

    select * from sys.database_principals
    select * from sys.database_role_members
    

    我假设您在数据库A中配置了数据库用户和角色,并且希望将它们复制到数据库B中。要在目标数据库中创建用户,请执行以下操作:

    • 在数据库A中运行以下查询
    • 剪切、粘贴、审阅并在数据库B中运行生成的脚本

    .

    SELECT 'CREATE USER [' + name + '] for login [' + name + ']'
     from sys.database_principals
     where Type = 'U'
      and name <> 'dbo'
    

    要在B中配置与A中相同角色的新用户,请执行以下操作:

    • 在数据库A中运行以下查询
    • 剪切、粘贴、审阅并在数据库B中运行生成的脚本

    .

    SELECT 'EXECUTE sp_addrolemember ''' + roles.name + ''', ''' + users.name + ''''
     from sys.database_principals users
      inner join sys.database_role_members link
       on link.member_principal_id = users.principal_id
      inner join sys.database_principals roles
       on roles.principal_id = link.role_principal_id
    

    总是回顾这些脚本。可能会有例外或特殊情况发生,你只是不想搞乱安全。

    如果新数据库位于其他SQL Server实例上,则必须首先创建SQL登录。如果您有用户定义的角色, 您需要先重新创建它们。(分配给他们的角色和权限是 非常 开放式的,我从来都不想在这样的情况下我需要这样做!)

        2
  •  0
  •   jl.    15 年前

    Idera有一个选择: http://www.idera.com/Products/Free-Tools/SQL-permissions/ 它会生成登录名和权限,并可能帮助您完成正在尝试的操作。

        3
  •  0
  •   Loïc Faure-Lacroix    12 年前

    对于db用户角色

    SELECT 'CREATE ROLE [' + name + ']' 
      FROM sys.database_principals 
      where type='R' and is_fixed_role = 0 and name != 'public'
    
    推荐文章