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 / 122757
Accepted
Jefferson B. Elias
Jefferson B. Elias
Asked: 2015-12-03 23:52:07 +0800 CST2015-12-03 23:52:07 +0800 CST 2015-12-03 23:52:07 +0800 CST

Devo descartar MS_DataCollectorInternalUser em msdb?

  • 772

No SQL Server 2008, existe um usuário msdbchamado MS_DataCollectorInternalUser. Este usuário não possui login associado e pode ser considerado um usuário órfão.

É uma prática recomendada de segurança descartar usuários órfãos.

O MS_DataCollectorInternalUsernão pode simplesmente ser descartado usando DROP USERo comando TSQL porque concedeu uma permissão de banco de dados IMPERSONATEa um usuário chamado dc_admin.

Não usamos o recurso Data Collector do SQL Server.

O que você sugere ?

sql-server security
  • 2 2 respostas
  • 2637 Views

2 respostas

  • Voted
  1. Remus Rusanu
    2015-12-04T00:14:49+08:002015-12-04T00:14:49+08:00

    MS_DataCollectorInternalUsernão é um usuário órfão. É um usuário sem login, uma fera diferente. Eu sugiro que você atualize suas práticas de segurança, você já pode ter descartado outros usuários não órfãos válidos. A menos que você tenha um boletim de segurança específico citando um motivo para descartar ou modificar esse usuário, você deve deixá-lo em vigor.

    • 1
  2. Best Answer
    Heisenberg
    2015-12-04T00:47:46+08:002015-12-04T00:47:46+08:00

    Não consigo encontrar referência no site da Microsoft, mas de acordo com a postagem no blog de Alfred Songy . MS_DataCollectorInternalUser tem a ver com o Data Collector É uma conta de usuário criada intencionalmente sem SQL Login e Um usuário criado sem login obviamente não pode se conectar ao banco de dados e, portanto, não vejo um risco de segurança. Minha sugestão é que ele não deve ser removido excluindo, modificando qualquer coisa no banco de dados do sistema não é uma boa ideia. :)

    Esta consulta abaixo ajuda a identificar usuários órfãos do SQL Server.

    select DB_NAME() [database], name as [user_name], type_desc,default_schema_name,create_date,modify_date from sys.database_principals 
    where type in ('G','S','U') 
    and authentication_type<>2 -- Use this filter only if you are running on SQL Server 2012 and major versions and you have "contained databases"
    and [sid] not in ( select [sid] from sys.server_principals where type in ('G','S','U') ) 
    and name not in ('dbo','guest','INFORMATION_SCHEMA','sys','MS_DataCollectorInternalUser')
    

    Depois de sabermos quais usuários iremos descartar, o script abaixo pode ser usado para descartar os usuários órfãos, levando em consideração a necessidade de primeiro remover a associação a esquemas e funções de banco de dados.

    use [master]
    go
    create proc dbo.sp_Drop_OrphanedUsers
    as
    begin
     set nocount on
     -- get orphaned users  
     declare @user varchar(max) 
     declare c_orphaned_user cursor for 
      select name
      from sys.database_principals 
      where type in ('G','S','U') 
      and authentication_type<>2 -- Use this filter only if you are running on SQL Server 2012 and major versions and you have "contained databases"
      and [sid] not in ( select [sid] from sys.server_principals where type in ('G','S','U') ) 
      and name not in ('dbo','guest','INFORMATION_SCHEMA','sys','MS_DataCollectorInternalUser')  open c_orphaned_user 
     fetch next from c_orphaned_user into @user
     while(@@FETCH_STATUS=0)
     begin
      -- alter schemas for user 
      declare @schema_name varchar(max) 
      declare c_schema cursor for 
       select name from  sys.schemas where USER_NAME(principal_id)=@user
      open c_schema 
      fetch next from c_schema into @schema_name
      while (@@FETCH_STATUS=0)
      begin
       declare @sql_schema varchar(max)
       select @sql_schema='ALTER AUTHORIZATION ON SCHEMA::['+@schema_name+ '] TO [dbo]'
       print @sql_schema
       exec(@sql_schema)
       fetch next from c_schema into @schema_name
      end
      close c_schema
      deallocate c_schema   
    
      -- alter roles for user 
      declare @dp_name varchar(max) 
      declare c_database_principal cursor for 
       select name from sys.database_principals
       where type='R' and user_name(owning_principal_id)=@user
      open c_database_principal
      fetch next from c_database_principal into @dp_name
      while (@@FETCH_STATUS=0)
      begin
       declare @sql_database_principal  varchar(max)
       select @sql_database_principal ='ALTER AUTHORIZATION ON ROLE::['+@dp_name+ '] TO [dbo]'
       print @sql_database_principal 
       exec(@sql_database_principal )
       fetch next from c_database_principal into @dp_name
      end
      close c_database_principal
      deallocate c_database_principal
    
      -- drop roles for user 
      declare @role_name varchar(max) 
      declare c_role cursor for 
       select dp.name--,USER_NAME(member_principal_id)
       from sys.database_role_members drm
       inner join sys.database_principals dp 
       on dp.principal_id= drm.role_principal_id
       where USER_NAME(member_principal_id)=@user 
      open c_role 
      fetch next from c_role into @role_name
      while (@@FETCH_STATUS=0)
      begin
       declare @sql_role varchar(max)
       select @sql_role='EXEC sp_droprolemember N'''+@role_name+''', N'''+@user+''''
       print @sql_role
       exec (@sql_role)
       fetch next from c_role into @role_name
      end
      close c_role
      deallocate c_role   
    
      -- drop user
      declare @sql_user varchar(max)
      set @sql_user='DROP USER ['+@user +']'
      print @sql_user
      exec (@sql_user)
      fetch next from c_orphaned_user into @user
     end
     close c_orphaned_user
     deallocate c_orphaned_user
     set nocount off
    end
    go
    -- mark stored procedure as a system stored procedure
    exec sys.sp_MS_marksystemobject sp_Drop_OrphanedUsers
    go
    

    Veja como executá-lo para todos os bancos de dados em uma instância do SQL Server:

    USE [master]
    GO
    EXEC sp_msforeachdb 'USE [?]; EXEC sp_Drop_OrphanedUsers'
    

    Outro link útil que aborda sua preocupação

    Espero que minha resposta ajude!

    • 0

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