0

SQL Server にatableと aがあります。テーブルの構造とSPのロジックを誰も変更できないテーブルとSPSPを追加したい。Permissionsそのようなタイプのアクセス許可を指定する方法はありますか? 回避dropしてalter命令するトリガー、またはこれを行うその他の方法。前もって感謝します。

4

3 に答える 3

2

明示的に許可した権限のみを持つ別のユーザーを作成して使用する必要があります (たとえばGRANT SELECT、テーブルから、またはGRANT EXECUTEストアド プロシージャに対して)。

特定のアクションが許可されていないと見なすのではなく、どのアクションが許可されているかを検討する必要があります (最小権限の原則を参照)。

于 2013-05-02T04:44:51.707 に答える
1

はい、これは可能ですが、constraint を使用していません。制約はビジネス ルールの種類の検証であり、ここでオブジェクトに対するアクセス許可に関する質問があるため、特定のユーザーのオブジェクトに対するアクセス許可を定義する必要があることは明らかです。テーブルとストアド プロシージャを保護する場合は、この手順に従ってください。

  1. 特定のデータベース/オブジェクト権限を持つ 1 つの新しいユーザー/ログインを作成します。
  2. - を使用して、Secure テーブルに権限を付与します。GRANT SELECT ON <TableName> TO <Username>

  3. - を使用して、セキュア ストアド プロシージャに GIVE 権限を付与します。GRANT EXECUTE ON <SP Name> TO <Username>

許可に関する詳細については、Google で検索してください。

于 2013-05-02T05:02:20.610 に答える
1

オブジェクトのアクセス許可を管理することを強くお勧めします。ただし、アクセス許可を制御できない場合は、データベース 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
于 2013-05-02T05:41:35.540 に答える