it-swarm-eu.dev

Uživatelé nemohou zobrazit tabulky v nestandardním schématu v SSMS

Mám problém s nastavením oprávnění VIEW DEFINITION Na úrovni schématu pro jednoho z mých uživatelů. Vytvořil jsem schéma TestSchema a přidal jsem několik tabulek. Uživatel má aktuálně nastavena oprávnění pro přístup a úpravu tabulky (SELECT, UPDATE, DELETE atd.) Prostřednictvím dbo_datareader A dbo_datawriter role. Nevidí však žádnou z tabulek v Průzkumníku objektů SSMS.

Pokusil jsem se udělit oprávnění k zobrazení definic:

grant view definition on SCHEMA :: [TestSchema] to [User]

To nefungovalo. Zkoušel jsem nastavit oprávnění na úrovni tabulky:

grant view definition on [TestSchema].[NewTable] to [User]

To také nefungovalo. Pak jsem vyzkoušel jen jednorázový grant:

grant view definition to [User]

A to dělal práce; nyní mohou vidět TestSchema, jakož i další schémata, ke kterým by neměli mít přístup.

Mým cílem je umožnit uživateli zobrazit všechny tabulky v daném schématu. Jak toho dosáhnu? Pokud jsem měl by být schopen to ve výchozím nastavení udělat, jaká oprávnění bych měl hledat, abych zjistil, proč nemůžu?

9
eykanal

Krátká odpověď: Nepoužívejte db_datareader nebo db_datawriter nebo jejich zamítnuté ekvivalenty. Jsou pouze pro zpětnou kompatibilitu. Jejich použití způsobí problémy, jako jsou ty, kterým čelíte.

Pokud chcete hlavnímu Alice dát oprávnění SELECT, INSERT, UPDATE a DELETE všem objektům s hodnotou tabulky ve schématu Sales, použijte následující.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

Pokud chcete hlavnímu Alice dát oprávnění SELECT, INSERT, UPDATE a DELETE všem objektům s hodnotou tabulky ve všech schématech, použijte následující.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

Viditelnost metadat pak bude fungovat správně.

11

Podívejte se na hlavní oprávnění ostatních oprávnění tam může být popření tam někde, která je příčinou problému. Nezapomeňte, že popření se bude vždy vztahovat na horní část grantu. A protože to není váš servr, mohlo by na účtu, který IT oddělení založilo, něco.

Použijte něco podobného na úrovni serveru:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

A něco takového na úrovni databáze

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO
0
Nick Winstanley

Stalo se mi to, když jsem upgradoval náš SQL Server z roku 2008R2 na rok 2014. db_datareader nebo db_datawriter nebo jejich odmítnutí ekvivalenty fungují v roce 2008R2 skvěle, ale v roce 2014 nefungují.

Příklad udělení oprávnění v SQL Server 2014

Pokud chcete dát uživateli Alice oprávnění SELECT, INSERT, UPDATE a DELETE ke všem objektům s hodnotou tabulky ve schématu Prodej, použijte následující.

GRANT SELECT, INSERT, UPDATE, DELETE NA SCHEMA :: Prodej Alice; Pokud chcete hlavnímu Alice dát oprávnění SELECT, INSERT, UPDATE a DELETE všem objektům s hodnotou tabulky ve všech schématech, použijte následující.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice; Viditelnost metadat pak bude fungovat správně.

Reference [Greenstone Walker].

0
Sundeep