1. ホーム
  2. sql-server

[解決済み] sp_addrolememberとalter user with default schemaの違いは何ですか...?

2022-03-03 19:09:51

質問

あるデータベースに開発者用のフルアクセスを追加したいと考えていました。 開発者がデータベースを完全にコントロールできるようにしたいのです。 どういうわけか、2つの方法を偶然見つけました。 これらは正しい方法なのでしょうか?

  1. 両コマンドのアクセス権/パーミッションの違いは何ですか?
  2. 私が欲しいものを達成するための正しいコマンドは何ですか? ありがとうございます。

コマンド1

USE [testdb1]
GO
ALTER USER [john] WITH DEFAULT_SCHEMA=[dbo]
GO

コマンド2

USE [testdb1]
GO
EXEC sp_addrolemember N'db_owner', N'john'
GO

解決方法は?

MSDN の素晴らしいソースです。 アンサー ということです。

sp_addrolemember

データベースユーザー、データベースロール、Windowsログイン、またはWindowsグループを追加します。 を現在のデータベース内のデータベースロールに追加します。

ALTER USER

データベースユーザーの名前を変更したり、そのデフォルトスキーマを変更したりします。

構文にも注意してください。

sp_addrolemember [ @rolename = ] 'role',
    [ @membername = ] 'security_account'


  -- SQL Server Syntax
ALTER USER userName  
     WITH <set_item> [ ,...n ]
[;]

<set_item> ::= 
      NAME = newUserName 
    | DEFAULT_SCHEMA = { schemaName | NULL }
    | LOGIN = loginName
    | PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
    | DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] 

つまり sp_addrolemember を使用することができます。 加える database user, database role, Windows login, or Windows group の中に 現在のデータベース .

しかし ALTER USER を使用すると、名前、デフォルトスキーマ、ログイン名、パスワードなどを変更することができます。 sp_addrolemember .

2つのMSDNリンクをチェックしてください。これらは SQL Server

あなたの場合は、おそらく sp_addrolemember ただし、ユーザーに必要なアクセス権を与えることができるロールがすでに存在する場合 (おそらく db_owner ).

USE [testdb1]
GO
EXEC sp_addrolemember N'db_owner', N'john'
GO

ユーザーのデフォルトスキーマを変更するとき、それは彼らが新しいロールを得ることを意味しません - しかし彼らは新しいデフォルトスキーマを得、アクセス可能性は既存のユーザーロールのための新しいスキーマのセキュリティルールに依存します。それは 可能性 そのデフォルトスキーマのユーザーに対するセキュリティルールに依存して、あなたが望むものを提供します。