AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 58772
Accepted
Martin Surasky
Martin Surasky
Asked: 2014-02-13 10:45:24 +0800 CST2014-02-13 10:45:24 +0800 CST 2014-02-13 10:45:24 +0800 CST

Como exportar todas as informações relacionadas à segurança de um banco de dados SQL Server

  • 772

Como vocês provavelmente sabem, o SQL Server não fornece uma solução pronta para exportar todas as instruções relacionadas à segurança que são declaradas para cada elemento no banco de dados (tanto no nível do banco de dados quanto no nível do objeto)

Estou falando sobre a capacidade de obter essas informações

  • Todos os usuários
  • Todas as funções definidas pelo usuário
  • Todas as permissões no nível do banco de dados (por exemplo, GRANT CREATE FUNCTION)
  • Todas as permissões no nível do objeto (por exemplo, GRANT SELECT ON OBJECT::xxx)

Você pensaria que o SQL Server DEVE ter algo assim, mas nem o SQL Server Export Wizard ou os vários scripts que são gerados como resultado de clicar com o botão direito do mouse nos objetos capturam essas informações.

Eu vi on-line muitas "soluções possíveis" diferentes usando scripts sem curadoria que as pessoas publicam graciosamente, mas como tenho que ter 100% de certeza de que todas as informações de segurança são capturadas, não posso confiar totalmente nesses scripts.

Eu tenho a opção de usá-los como ponto de partida para escrever algo, mas odeio ter que reinventar a roda para um requisito que você acha que muitas pessoas podem ter.

Não existe uma ferramenta fornecida por alguém (seja como parte do produto SQL Server ou uma ferramenta de terceiros) que possa fornecer essas informações de forma confiável?

Ou, pelo menos, existe um script suportado pela comunidade que a maioria das pessoas concordaria que "fará o trabalho"?

Obrigado!

sql-server security
  • 3 3 respostas
  • 49702 Views

3 respostas

  • Voted
  1. Anti-weakpasswords
    2014-02-14T20:41:44+08:002014-02-14T20:41:44+08:00

    Lamento que você não tenha recebido uma resposta desde ontem; aqui está pelo menos um ponto de partida para você.

    Você pode tentar puxar as peças que você precisa. Como sempre, leia os tópicos de discussão (infelizmente, não consegui encontrar um script endossado pelos grandes nomes que reconheço, então teste bem! Permissões de nível de esquema, objeto, servidor e coluna geralmente estão ausentes).

    Na verdade, não usei nenhum deles, mas são um conjunto de pontos de partida, sem ordem específica.

    Listar todas as permissões em todos os bancos de dados

    Auditoria de permissões automatizada com Powershell e T-SQL: parte 1

    Script de permissão em todos os bancos de dados

    Permissões de nível de banco de dados de script v2.1

    Procedimento armazenado para script de permissões de usuário

    Consultas de segurança: nível de banco de dados

    Consultas de segurança: nível do servidor

    • 9
  2. Best Answer
    spaghettidba
    2014-04-16T08:05:34+08:002014-04-16T08:05:34+08:00

    O Idera SQL Permissions Extractor parece ser o produto que você está procurando.

    Ele pode criar scripts de permissões de servidor e objeto e é gratuito. Há também uma edição comercial, chamada SQL Secure , que possui mais recursos.

    A comparação de recursos entre as duas edições pode ser encontrada aqui .

    • 6
  3. Pruthvi Raj
    2015-11-30T03:03:49+08:002015-11-30T03:03:49+08:00

    https://gallery.technet.microsoft.com/Extract-Database-dfa53d5a/

    consulte esse link para baixar o código abaixo

    set nocount off
    
    IF OBJECT_ID(N'tempdb..##temp1') IS NOT NULL
         DROP TABLE ##temp1
    
    create table ##temp1(query varchar(1000))
    
    insert into ##temp1 
    select 'use '+db_name() +';'
    
    insert into ##temp1 
    select 'go'
    
    /*creating database roles*/
    insert into ##temp1
                        select 'if DATABASE_PRINCIPAL_ID('''+name+''')  is null 
                        exec sp_addrole '''+name+''''  from sysusers
    where issqlrole = 1 and (sid is not null and sid <> 0x0)
    
    /*creating application roles*/
    insert into ##temp1
                        select 'if DATABASE_PRINCIPAL_ID('+char(39)+name+char(39)+')
                        is null CREATE APPLICATION ROLE ['+name+'] WITH DEFAULT_SCHEMA = ['+
                        default_schema_name+'], Password='+char(39)+'Pass$w0rd123'+char(39)+' ;'
     from sys.database_principals
    where type_desc='APPLICATION_ROLE'
    
    insert into ##temp1 
                         select  
                                    case  
                                              when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                           then
                                                                    substring (state_desc,0,6)+' '+permission_name+' to '+'['+USER_NAME(grantee_principal_id)+']'+' WITH GRANT OPTION ;'
    
                                                             else 
                                                                      state_desc+' '+permission_name+' to '+'['+USER_NAME(grantee_principal_id)+']'+' ;'
                        END
    from sys.database_permissions 
    where class=0 and USER_NAME(grantee_principal_id) not in ('dbo','guest','sys','information_schema')
    
    insert into ##temp1 
                        select 
                                   case 
                                             when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                       then
                                                                 substring (state_desc,0,6)+' '+permission_name+' on '+OBJECT_SCHEMA_NAME(major_id)+'.['+OBJECT_NAME(major_id)
                                                                 +'] to '+'['+USER_NAME(grantee_principal_id)+']'+' with grant option ;'
                                                         else 
                                                                  state_desc+' '+permission_name+' on '+OBJECT_SCHEMA_NAME(major_id)+'.['+OBJECT_NAME(major_id)
                                                                  +'] to '+'['+USER_NAME(grantee_principal_id)+']'+' ;'
                                      end
    from sys.database_permissions where class=1 and USER_NAME(grantee_principal_id) not in ('public');
    
    
     insert into ##temp1 
                          select 
                                     case 
                                               when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                         then
                                                                  substring (state_desc,0,6)+' '+permission_name+' ON schema::['+sa.name+
                                                                   '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                           else
                                                                   state_desc+' '+permission_name+' ON schema::['+sa.name+
                                                                   '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                           COLLATE LATIN1_General_CI_AS  
                                          end
    from sys.database_permissions dp inner join sys.schemas sa on
     sa.schema_id = dp.major_id where dp.class=3
    
     insert into ##temp1 
                         select 
                                     case 
                                                when state_desc='GRANT_WITH_GRANT_OPTION'
                                                 then
                                                        substring (state_desc,0,6)+' '+permission_name+' ON APPLICATION  ROLE::['+sa.name+
                                                         '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                 else
                                                          state_desc+' '+permission_name+' ON  APPLICATION ROLE::['+sa.name+
                                                          '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                          COLLATE LATIN1_General_CI_AS  
                             end
    from sys.database_permissions dp inner join sys.database_principals  sa on
     sa.principal_id = dp.major_id where dp.class=4 and sa.type='A'
    
     insert into ##temp1 
                          select 
                                     case 
                                              when state_desc='GRANT_WITH_GRANT_OPTION' 
                                               then
                                                      substring (state_desc,0,6)+' '+permission_name+' ON   ROLE::['+sa.name+
                                                      '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                               else
                                                       state_desc+' '+permission_name+' ON   ROLE::['+sa.name+
                                                        '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                         COLLATE LATIN1_General_CI_AS  
                                               end
     from sys.database_permissions dp inner join
    sys.database_principals  sa on sa.principal_id = dp.major_id 
     where dp.class=4 and sa.type='R'
    
     insert into ##temp1 
                          select 
                                      case 
                                               when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                           then
                                                                   substring (state_desc,0,6)+' '+permission_name+' ON ASSEMBLY::['+sa.name+
                                                                    '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                            else
                                                                    state_desc+' '+permission_name+' ON ASSEMBLY::['+sa.name+
                                                                     '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                                     COLLATE LATIN1_General_CI_AS  
                                           end
     from sys.database_permissions dp inner join sys.assemblies sa on
     sa.assembly_id = dp.major_id 
     where dp.class=5
    
     insert into ##temp1
                         select 
                                     case 
                                               when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                then
                                                        substring (state_desc,0,6)+'  '+permission_name+' ON type::['
                                                        +SCHEMA_NAME(schema_id)+'].['+sa.name+
                                                        '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                else
                                                        state_desc+' '+permission_name+' ON type::['
                                                        +SCHEMA_NAME(schema_id)+'].['+sa.name+
                                                         '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                         COLLATE LATIN1_General_CI_AS  
                                                  end
     from sys.database_permissions dp inner join sys.types sa on
     sa.user_type_id = dp.major_id 
     where dp.class=6
    
    
     insert into ##temp1
                          select 
                                     case 
                                              when state_desc='GRANT_WITH_GRANT_OPTION' 
                                               then
                                                         substring (state_desc,0,6)+'  '+permission_name+' ON  XML SCHEMA COLLECTION::['+
                                                         SCHEMA_NAME(SCHEMA_ID)+'].['+sa.name+'] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                else
                                                         state_desc+' '+permission_name+' ON  XML SCHEMA COLLECTION::['+
                                                         SCHEMA_NAME(SCHEMA_ID)+'].['+sa.name+'] to ['+user_name(dp.grantee_principal_id)+'];'
                                                         COLLATE LATIN1_General_CI_AS  
                                       end
     from sys.database_permissions dp inner join sys.xml_schema_collections sa on
     sa.xml_collection_id = dp.major_id 
     where dp.class=10
    
    
    
    insert into ##temp1
                        select
                                   case 
                                             when state_desc='GRANT_WITH_GRANT_OPTION' 
                                              then
                                                       substring (state_desc,0,6)+'  '+permission_name+' ON message type::['+sa.name+
                                                        '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                               else
                                                        state_desc+' '+permission_name+' ON message type::['+sa.name+
                                                        '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                         COLLATE LATIN1_General_CI_AS  
                                                 end
     from sys.database_permissions dp inner join sys.service_message_types sa on
     sa.message_type_id = dp.major_id 
     where dp.class=15
    
    
     insert into ##temp1
                          select 
                                      case 
                                                when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                  then
                                                           substring (state_desc,0,6)+'  '+permission_name+' ON contract::['+sa.name+
                                                            '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                    else
                                                             state_desc+' '+permission_name+' ON contract::['+sa.name+
                                                             '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                             COLLATE LATIN1_General_CI_AS  
                                       end
     from sys.database_permissions dp inner join sys.service_contracts sa on
     sa.service_contract_id = dp.major_id 
     where dp.class=16
    
    
    
      insert into ##temp1
                          select 
                                     case 
                                               when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                then
                                                          substring (state_desc,0,6)+'  '+permission_name+' ON SERVICE::['+sa.name+
                                                            '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                  else
                                                           state_desc+'  '+permission_name+' ON SERVICE::['+sa.name+
                                                            '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                            COLLATE LATIN1_General_CI_AS  
                                        end
     from sys.database_permissions dp inner join sys.services sa on
     sa.service_id = dp.major_id 
     where dp.class=17
    
    
     insert into ##temp1 
                          select 
                                       case 
                                                  when state_desc='GRANT_WITH_GRANT_OPTION'
                                                   then
                                                              substring (state_desc,0,6)+'  '+permission_name+' ON REMOTE SERVICE BINDING::['+sa.name+
                                                              '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                     else
                                                              state_desc+' '+permission_name+' ON REMOTE SERVICE BINDING::['+sa.name+
                                                               '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                              COLLATE LATIN1_General_CI_AS  
                                          end
     from sys.database_permissions dp inner join sys.remote_service_bindings sa on
     sa.remote_service_binding_id = dp.major_id 
     where dp.class=18
    
     insert into ##temp1
                          select
                                      case 
                                                when state_desc='GRANT_WITH_GRANT_OPTION'
                                                  then
                                                            substring (state_desc,0,6)+'  '+permission_name+' ON route::['+sa.name+
                                                            '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                    else
                                                              state_desc+' '+permission_name+' ON route::['+sa.name+
                                                              '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                             COLLATE LATIN1_General_CI_AS  
                                          end
     from sys.database_permissions dp inner join sys.routes sa on
     sa.route_id = dp.major_id 
     where dp.class=19
    
     insert into ##temp1 
                          select 
                                     case 
                                               when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                then
                                                         substring (state_desc,0,6)+'  '+permission_name+' ON FULLTEXT CATALOG::['+sa.name+
                                                          '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                 else
                                                           state_desc+' '+permission_name+' ON FULLTEXT CATALOG::['+sa.name+
                                                           '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                            COLLATE LATIN1_General_CI_AS  
                                           end
     from sys.database_permissions dp inner join sys.fulltext_catalogs sa on
     sa.fulltext_catalog_id = dp.major_id 
     where dp.class=23
    
      insert into ##temp1 
                          select 
                                     case 
                                               when state_desc='GRANT_WITH_GRANT_OPTION'
                                                then
                                                            substring (state_desc,0,6)+'  '+permission_name+' ON SYMMETRIC KEY::['+sa.name+
                                                            '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                 else
                                                            state_desc+' '+permission_name+' ON SYMMETRIC KEY::['+sa.name+
                                                            '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                            COLLATE LATIN1_General_CI_AS  
                                                 end
     from sys.database_permissions dp inner join sys.symmetric_keys sa on
     sa.symmetric_key_id = dp.major_id 
     where dp.class=24
    
     insert into ##temp1 
                          select 
                                      case 
                                               when state_desc='GRANT_WITH_GRANT_OPTION' 
                                                 then
                                                           substring (state_desc,0,6)+'  '+permission_name+' ON certificate::['+sa.name+
                                                            '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                   else
                                                              state_desc+' '+permission_name+' ON certificate::['+sa.name+
                                                              '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                               COLLATE LATIN1_General_CI_AS  
                                       end
     from sys.database_permissions dp inner join sys.certificates sa on
     sa.certificate_id = dp.major_id 
     where dp.class=25
    
    
     insert into ##temp1 
                         select 
                                     case 
                                              when state_desc='GRANT_WITH_GRANT_OPTION' 
                                              then
                                                         substring (state_desc,0,6)+'  '+permission_name+' ON ASYMMETRIC KEY::['+sa.name+
                                                         '] to ['+user_name(dp.grantee_principal_id)+'] with grant option ;'
                                                 else
                                                          state_desc+' '+permission_name+' ON ASYMMETRIC KEY::['+sa.name+
                                                           '] to ['+user_name(dp.grantee_principal_id)+'] ;'
                                                           COLLATE LATIN1_General_CI_AS  
                            end
     from sys.database_permissions dp inner join sys.asymmetric_keys sa on
     sa.asymmetric_key_id = dp.major_id 
     where dp.class=26
    
    insert into ##temp1 
                         select  'exec sp_addrolemember ''' +p.NAME+''','+'['+m.NAME+']'+' ;'
    FROM sys.database_role_members rm
    JOIN sys.database_principals p
    ON rm.role_principal_id = p.principal_id
    JOIN sys.database_principals m
    ON rm.member_principal_id = m.principal_id
    where m.name not like 'dbo';
    
    
    
    
    
    select *  from ##temp1  
    
    • 2

relate perguntas

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Protegendo senhas de banco de dados

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve