sql >> Databáze >  >> RDS >> Sqlserver

Skrýt databázi SQL z Management Studio

Po hodinách pokusu zjistit, jak vytvořit uživatelský účet, který má přístup pouze k 1 DB a může vidět pouze tuto DB. Myslím, že jsem na to přišel!!!!

  1. Vytvořte uživatelský účet (ujistěte se, že není namapován na žádnou databázi, jinak se zobrazí poslední chybová zpráva 15110, úroveň 16, stav 1 a poznamenejte si navrhované řešení )

    USE [master]
    GO
    CREATE LOGIN [us4] 
        WITH PASSWORD=N'123', 
        DEFAULT_DATABASE=[master], 
        CHECK_EXPIRATION=OFF, 
        CHECK_POLICY=OFF
    
  2. Klepněte pravým tlačítkem myši na horní část SQL (Název SQLSERVER)>Properties>Permissions>Klikněte na user account a vyberte Deny pro zobrazení databází.

    use [master]
    GO
    DENY VIEW ANY DATABASE TO [us4]
    
  3. Klikněte pravým tlačítkem na nově vytvořenou DB, Vlastnosti, Soubory a změňte vlastníka na nově vytvořený účet. (důležitá poznámka :ALTER ROLE [db_owner] ADD MEMBER [us4] nefunguje )

    USE [dbname]
    GO
    EXEC dbo.sp_changedbowner @loginame = N'us4', @map = false
    

V tomto okamžiku, jakmile se uživatel přihlásí, uvidí Master, tempdb a také novou DB, které je vlastníkem DB. Možná budete chtít přejít na Tools>Option a povolil možnost skrýt systémové objekty, abyste nezobrazovali master, tempdb atd. Možná budete také potřebovat SP1, pokud tato možnost nefunguje

Msg 15110, Level 16, State 1, Line 1
The proposed new database owner is already a user or aliased in the database.

navrhované řešení pro Msg 15110: Chcete-li vyřešit výše uvedenou chybu, jednoduše odstraňte uživatele z uzlu zabezpečení databáze a zkuste to znovu

Doufám, že to pomůže...

Nikhil



  1. Jak mohu zkopírovat jeden řádek/záznam z jedné instance MySQL do druhé?

  2. Jaký je ekvivalent PostgreSQL pro ISNULL()

  3. Spojte jeden řádek s více řádky v jiné tabulce

  4. Laravel:získání jedné hodnoty z dotazu MySQL