新しく作成されたテーブルにアクセス許可(つまり、GRANT)をプログラムで設定します。私はSQL Serverにデータベースの別のテーブルに行き、右クリックして "Script Table as"を実行することでそのスクリプトを表示することを望んでいましたが、その下にあるGRANTのオプションは表示されません。テーブルにアクセス許可をプログラムで設定する
SQL Serverにこのスクリプトを表示させることはできますか?
新しく作成されたテーブルにアクセス許可(つまり、GRANT)をプログラムで設定します。私はSQL Serverにデータベースの別のテーブルに行き、右クリックして "Script Table as"を実行することでそのスクリプトを表示することを望んでいましたが、その下にあるGRANTのオプションは表示されません。テーブルにアクセス許可をプログラムで設定する
SQL Serverにこのスクリプトを表示させることはできますか?
さらにご覧ください。単純なバージョンでは、権限を設定するダイアログを使用します。例えば、
より一般的で先進的なアプローチ - はるかに多くのオプションを持つ - は、データベース・レベルでスクリプト機能を使用することです。データベース上で、をクリックして選択し、ウィザードを実行して、テーブルと必要なスクリプティングオプションを選択します。スクリプティングオプションタブの[詳細]ボタンをクリックしてください。このタブでは、「オブジェクトレベルの権限」(デフォルトではオフ)が表示されます。
ありがとう、これは適切な場所のようです。しかし、_Script_をプルダウンして_Script Action to New Query Window_を選択すると、「スクリプトを作成するアクションがありません」というメッセージが表示されます。これは、_Script_の下のいずれの選択に対しても起こります。 *権限が選択されており、権限が選択されています(この場合は、権限付与:削除、許可:挿入、付与:選択と付与:更新) –
あなたは何も変更しませんでした。最初の提案は、権限の変更を行い、**その特定の時点で**行われた変更に対して実行される実際のtsqlスクリプトを表示したい場合に適用されます** – SMor
OIC、それらのボックスのチェックを外し、スクリプトを再度確認して確認することができます。 –
コメントするには長すぎます。この場合
GRANT <n> ON YourDatabase.YourSchema.YourTable TO YourSpecificUser
それはテーブルのため、<n>
は、次のいずれか:
DELETE
INSERT
REFERENCES
SELECT
UPDATE
ユーザーにfixed database roleがある場合、明示的に許可するよりも多くのアクセス権を持つ可能性があります。 GRANT Object Permissionsについてもっと読む。テーブルの上の権限のリストを返すために注目すべき
、あなたは、これらの結果をキャプチャして、動的なSQLクエリを構築するためにそれらをループすることができますsp_table_privileges
sp_table_privileges @table_name = 'YourTable'
を使用することができます。
以下のスクリプトをTableName
と置き換えてください。NewTableName
は何ですか。印刷に満足したら、exec(@sql)
のコメントを外して、印刷されたコードを実行することができます。
if object_id('tempdb..#priv') is not null
drop table #priv
create table #priv(ID int identity (1,1)
,TABLE_QUALIFIER varchar(64)
,TABLE_OWNER VARCHAR(64)
,TABLE_NAME VARCHAR(64)
,GRANTOR VARCHAR(64)
,GRANTEE VARCHAR(64)
,PRIVILEGE VARCHAR(64)
,IS_GRANTABLE VARCHAR(8))
insert into #priv
exec sp_table_privileges @table_name = 'YourTableName'
declare @i int = 1
declare @max int = (select max(id) from #priv)
declare @sql varchar(max) = ''
while (@i <= @max)
begin
set @sql = @sql + (select ' GRANT ' + stuff(PRIVILEGE,1,0,' ') + ' ON ' + stuff(TABLE_NAME,1,0,' ') + ' TO ' + stuff(GRANTEE,1,0,' ') + char(13) + ' GO ' + char(13) from #priv where ID = @i)
set @i = @i + 1
end
print(@sql)
set @sql = replace(@sql,'YourTableName','NewTableName')
print(@sql)
--exec(@sql)
「grant select on SomeTable to SomeUser'」のようなものですか?または、表の 'GRANT ALL'は' DELETE、INSERT、REFERENCES、SELECT、UPDATE'となります – scsimon
特定の権限を持つ特定のユーザー。 –
* real *の問題は、パーミッションを設定していません - 特定のテーブルに対して*既存のパーミッションをフェッチしています*。そうですか? –