quando executo o seguinte script:
-- ——— SCRIPT GRANTS for Object Privileges—————
IF OBJECT_ID('[sys].[sysrowsets]') IS NOT NULL GRANT CONTROL on [sys].[sysrowsets] to [db_myrole_BA]
Recebo esta mensagem de erro:
Msg 15151, Level 16, State 1, Line 271
Cannot find the object 'sysrowsets', because it does not exist or you do not have permission.
No entanto:
quando executo isso:
select radhe=OBJECT_ID('[sys].[sysrowsets]')
Meu script original vem daqui:
-- SCRIPT GRANTS for Objects Level Privilegs
PRINT '-- ——— SCRIPT GRANTS for Object Privileges—————'
SELECT
[GRANTS for Object Privileges]='IF OBJECT_ID(''['+ sys.schemas.name + '].[' + sys.objects.name + ']''' + ') IS NOT NULL ' + CHAR(13) + SPACE(1) +
state_desc + ' ' + permission_name + ' on ['+ sys.schemas.name + '].[' + sys.objects.name + '] to [' + sys.database_principals.name + ']' COLLATE SQL_Latin1_General_CP1_CI_AS
from sys.database_permissions
join sys.objects on sys.database_permissions.major_id =
sys.objects.object_id
join sys.schemas on sys.objects.schema_id = sys.schemas.schema_id
join sys.database_principals on sys.database_permissions.grantee_principal_id =
sys.database_principals.principal_id
where sys.database_principals.name not in ( 'public', 'guest')
--order by 1, 2, 3, 5
Como é possível que eu esteja recebendo esse erro?
Quero salvar todas essas permissões, para que, quando restaurar o banco de dados, possa reaplicar essas permissões.
Você precisa excluir tabelas internas usando
is_ms_shipped = 0
.QUOTENAME
.WITH GRANT OPTION
corretamente.AS SomeGrantor
para que as permissões sejam encadeadas do concedente original correto.A resposta do Charlieface é a que vou aceitar, é muito boa.
A única razão pela qual estou postando aqui é porque a consulta dele não funcionou no meu ambiente principalmente devido a problemas de COLLATE, e eu adoro e uso este site como referência , mas como disse a resposta dele é minha, com agradecimentos meus.
também nos comentários sepupic menciona que "Nome de objeto inválido sys.sysrowsets" é muito útil, recomendando DAC :