sql >> データベース >  >> RDS >> Sqlserver

SQL Server - すべてのデータベースへの読み取りアクセスをログインに付与する方法は?

    1 つの方法は、SSMS のクエリ メニューで [Results to Text] を設定してから、以下を実行することです。

    実際に変更を行うわけではありませんが、確認して実行するスクリプトが生成されます。

    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' 
    

    または、sys.sp_MSforeachdb を見ることができます こちら または Aaron Bertrand の改良版 こちら

    これを実行してもすべての文字が表示されない場合は、[テキストのクエリ オプション] を開き、[各列に表示される最大文字数] の設定を確認してください。これがすべての文字を表示するのに十分な大きさの値に設定されていることを確認してください。



    1. RailsHerokuアプリのエラー

    2. MySqlのバックアップと復元

    3. オブジェクトのjsonb配列のキー値を更新します

    4. Oracleが複数のテーブルから行を削除する