Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server — jak przyznać dostęp do odczytu do WSZYSTKICH baz danych do logowania?

Jednym ze sposobów byłoby ustawienie „Wyniki na tekst” w menu zapytań w SSMS, a następnie wykonanie poniższych czynności.

W rzeczywistości nie wprowadza zmiany, ale generuje skrypt do sprawdzenia i wykonania.

SET NOCOUNT ON;

DECLARE @user_name    SYSNAME
        , @login_name SYSNAME;

SELECT @user_name = 'user_name',
       @login_name = 'login_name'

SELECT '
    USE ' + QUOTENAME(NAME) + ';

    CREATE USER ' + QUOTENAME(@user_name)
       + ' FOR LOGIN ' + QUOTENAME(@login_name)
       + ' WITH DEFAULT_SCHEMA=[dbo];

    EXEC sys.sp_addrolemember
      ''db_datareader'',
      ''' + QUOTENAME(@user_name) + ''';

    EXEC sys.sp_addrolemember
      ''db_denydatawriter'',
      '''
       + QUOTENAME(@user_name) + '''; 

GO
'
FROM   sys.databases
WHERE  database_id > 4
       AND state_desc = 'ONLINE' 

Możesz też spojrzeć na sys.sp_MSforeachdb jak tutaj lub ulepszona wersja Aarona Bertranda tutaj

Jeśli po uruchomieniu nie widzisz wszystkich znaków, otwórz Opcje zapytania dla tekstu i sprawdź ustawienie „Maksymalna liczba znaków wyświetlanych w każdej kolumnie”. Upewnij się, że jest ustawiony na wartość wystarczająco dużą, aby wyświetlić wszystkie znaki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest kolejność wykonywania tej instrukcji SQL?

  2. Dlaczego kopia zapasowa SQL Server jest o wiele większa niż pliki DB?

  3. Przełączanie partycji tabel w programie SQL Server:przewodnik

  4. Rozpoznawanie przeciążenia nie powiodło się, ponieważ nie można wywołać dostępnego „nowego” bez konwersji zawężającej

  5. Ustaw domyślny profil publiczny dla poczty bazy danych (SSMS)