Usuário com melhor resposta
Recuperar o database anexado(Attach)

Pergunta
-
Respostas
-
Eu fiz um teste usando Police Based Management. Não vai fazer exatamente o que você quer, mas ao menos você terá a informação.
O que eu fiz foi pegar e criar uma condition com a data de criação da base, se for maior do que uma determinada data, ele vai gerar informação no Evaluate daquela Policy.
SEgue o exemplo:
Declare @condition_id int EXEC msdb.dbo.sp_syspolicy_add_condition @name=N'Database CreateDate', @description=N'', @facet=N'Database', @expression=N'<Operator> <TypeClass>Bool</TypeClass> <OpType>LE</OpType> <Count>2</Count> <Attribute> <TypeClass>DateTime</TypeClass> <Name>CreateDate</Name> </Attribute> <Function> <TypeClass>DateTime</TypeClass> <FunctionType>DateTime</FunctionType> <ReturnType>DateTime</ReturnType> <Count>1</Count> <Constant> <TypeClass>String</TypeClass> <ObjType>System.String</ObjType> <Value>2013-12-19T00:00:00.0000000</Value> </Constant> </Function> </Operator>', @is_name_condition=0, @obj_name=N'', @condition_id=@condition_id OUTPUT Select @condition_id GO Declare @object_set_id int EXEC msdb.dbo.sp_syspolicy_add_object_set @object_set_name=N'policy_ObjectSet', @facet=N'Database', @object_set_id=@object_set_id OUTPUT Select @object_set_id Declare @target_set_id int EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'policy_ObjectSet', @type_skeleton=N'Server/Database', @type=N'DATABASE', @enabled=True, @target_set_id=@target_set_id OUTPUT Select @target_set_id EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0 GO Declare @policy_id int EXEC msdb.dbo.sp_syspolicy_add_policy @name=N'Teste', @condition_name=N'Database CreateDate', @policy_category=N'', @description=N'', @help_text=N'', @help_link=N'', @schedule_uid=N'00000000-0000-0000-0000-000000000000', @execution_mode=0, @is_enabled=False, @policy_id=@policy_id OUTPUT, @root_condition_name=N'', @object_set=N'policy_ObjectSet' Select @policy_id GO
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 20 de dezembro de 2013 16:13
- Marcado como Resposta Giovani Cr quarta-feira, 25 de dezembro de 2013 10:39
-
Olá Roberto!
Acabei conseguindo com EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)'). Porem via trigger nao posso usar o comando "USE", para acessar o database e negar permição a ele.
Conhece algum comando do tipo DENY onde eu informo o database no mesmo comando?- Marcado como Resposta Giovani Cr quarta-feira, 25 de dezembro de 2013 10:39
Todas as Respostas
-
Olá,
Talvez uma alternativa seja recuperar via EVENT_DATA()... Você pode explicar melhor o que está querendo fazer?
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
-
Olá, posso sim.
Preciso limitar um database de forma que outra pessoa não consiga anexa-lo. porem não posso mudar características do usuário.
tentei limitar com trigger_ddl porem nao encontrei uma forma de bloquear o attach.
pensei em excluir o usuário corrente do database anexado, por isso preciso do database.
Estou aberto a sugestões.
Obrigado.
- Sugerido como Resposta Roberto F FonsecaModerator quinta-feira, 19 de dezembro de 2013 20:02
- Não Sugerido como Resposta Roberto F FonsecaModerator quinta-feira, 19 de dezembro de 2013 20:02
-
Eu fiz um teste usando Police Based Management. Não vai fazer exatamente o que você quer, mas ao menos você terá a informação.
O que eu fiz foi pegar e criar uma condition com a data de criação da base, se for maior do que uma determinada data, ele vai gerar informação no Evaluate daquela Policy.
SEgue o exemplo:
Declare @condition_id int EXEC msdb.dbo.sp_syspolicy_add_condition @name=N'Database CreateDate', @description=N'', @facet=N'Database', @expression=N'<Operator> <TypeClass>Bool</TypeClass> <OpType>LE</OpType> <Count>2</Count> <Attribute> <TypeClass>DateTime</TypeClass> <Name>CreateDate</Name> </Attribute> <Function> <TypeClass>DateTime</TypeClass> <FunctionType>DateTime</FunctionType> <ReturnType>DateTime</ReturnType> <Count>1</Count> <Constant> <TypeClass>String</TypeClass> <ObjType>System.String</ObjType> <Value>2013-12-19T00:00:00.0000000</Value> </Constant> </Function> </Operator>', @is_name_condition=0, @obj_name=N'', @condition_id=@condition_id OUTPUT Select @condition_id GO Declare @object_set_id int EXEC msdb.dbo.sp_syspolicy_add_object_set @object_set_name=N'policy_ObjectSet', @facet=N'Database', @object_set_id=@object_set_id OUTPUT Select @object_set_id Declare @target_set_id int EXEC msdb.dbo.sp_syspolicy_add_target_set @object_set_name=N'policy_ObjectSet', @type_skeleton=N'Server/Database', @type=N'DATABASE', @enabled=True, @target_set_id=@target_set_id OUTPUT Select @target_set_id EXEC msdb.dbo.sp_syspolicy_add_target_set_level @target_set_id=@target_set_id, @type_skeleton=N'Server/Database', @level_name=N'Database', @condition_name=N'', @target_set_level_id=0 GO Declare @policy_id int EXEC msdb.dbo.sp_syspolicy_add_policy @name=N'Teste', @condition_name=N'Database CreateDate', @policy_category=N'', @description=N'', @help_text=N'', @help_link=N'', @schedule_uid=N'00000000-0000-0000-0000-000000000000', @execution_mode=0, @is_enabled=False, @policy_id=@policy_id OUTPUT, @root_condition_name=N'', @object_set=N'policy_ObjectSet' Select @policy_id GO
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 20 de dezembro de 2013 16:13
- Marcado como Resposta Giovani Cr quarta-feira, 25 de dezembro de 2013 10:39
-
Olá Roberto!
Acabei conseguindo com EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)'). Porem via trigger nao posso usar o comando "USE", para acessar o database e negar permição a ele.
Conhece algum comando do tipo DENY onde eu informo o database no mesmo comando?- Marcado como Resposta Giovani Cr quarta-feira, 25 de dezembro de 2013 10:39