SQL Server にatable
と aがあります。テーブルの構造とSPのロジックを誰も変更できないテーブルとSPSP
を追加したい。Permissions
そのようなタイプのアクセス許可を指定する方法はありますか? 回避drop
してalter
命令するトリガー、またはこれを行うその他の方法。前もって感謝します。
3 に答える
明示的に許可した権限のみを持つ別のユーザーを作成して使用する必要があります (たとえばGRANT SELECT
、テーブルから、またはGRANT EXECUTE
ストアド プロシージャに対して)。
特定のアクションが許可されていないと見なすのではなく、どのアクションが許可されているかを検討する必要があります (最小権限の原則を参照)。
はい、これは可能ですが、constraint を使用していません。制約はビジネス ルールの種類の検証であり、ここでオブジェクトに対するアクセス許可に関する質問があるため、特定のユーザーのオブジェクトに対するアクセス許可を定義する必要があることは明らかです。テーブルとストアド プロシージャを保護する場合は、この手順に従ってください。
- 特定のデータベース/オブジェクト権限を持つ 1 つの新しいユーザー/ログインを作成します。
- を使用して、Secure テーブルに権限を付与します。
GRANT SELECT ON <TableName> TO <Username>
- を使用して、セキュア ストアド プロシージャに GIVE 権限を付与します。
GRANT EXECUTE ON <SP Name> TO <Username>
許可に関する詳細については、Google で検索してください。
オブジェクトのアクセス許可を管理することを強くお勧めします。ただし、アクセス許可を制御できない場合は、データベース DDL トリガーを設定して、少なくともイベントをログに記録することを検討してください。
create table AuditTable
(
event_type varchar(max) not null
, tsql_command varchar(max) not null
, modified_by varchar(128) not null default (current_user)
, modified_time datetime not null default (getdate())
)
go
create trigger log_database_level_event
on database
for ddl_database_level_events
as
insert AuditTable
(
event_type
, tsql_command
)
values
(
eventdata().value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(max)')
, eventdata().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)')
)
go
create user tester without login
go
execute as user = 'tester'
go
create proc test_proc
as
select @@version
go
alter proc test_proc
as
select 1
go
revert
go
select * from AuditTable
go