12

immutableMSSQLで列をマークすることは可能ですか?

便利な DDL 機能のようです。値が行に設定されると (「行」は主キーに対する値の特定の関係として定義されます)、その行を削除しないと変更できませんでした。

明らかに (ほとんどの場合と同様)、これはアプリケーション層で実行できる以上のものですが、SQL DDL の楽しみの半分は、アプリケーション コードのエラー チェックです。

4

5 に答える 5

14

DML を実行しているユーザーがオブジェクトの所有者ではなく、データベース自体の「db_owner」でもない場合は、「挿入」権限のみを付与できますが、そのテーブルの更新権限は付与できません。

次のテーブルがあると仮定しますid, col1, col2

grant insert, select, delete on the_table to the_user;
grant update (id, col2) on the_table to the_user;

これらの許可により、_user は行を挿入し、3 つの列すべてに値を指定できます。彼は、idおよびcol2列も更新できますが、列は更新できませんcol1

db_owner (および場合によってはテーブルの作成者/所有者) は、常にすべての列を更新できます。それらのロールからその特権を取り消す方法があるかどうかはわかりません。

于 2012-08-28T20:27:19.403 に答える
8

いいえ、SQL Server にはそのような機能はありません。

私が考えることができる最も近いのは、特定の列の値が論理テーブルと同じであるかどうかをチェックし、変更された行の更新を拒否するテーブルの更新トリガーINSERTEDですDELETED

于 2012-08-28T19:54:59.037 に答える
3

私の知る限り、これは DDL では不可能です。ただし、要件を満たすために BEFORE UPDATE トリガーを実装できます。BEFORE UPDATE トリガーでは、行を更新するのではなく、例外を発生させたり、必要なことを行うことができます。

于 2012-08-28T19:54:21.613 に答える
2

もう 1 つの方法は、テーブルに対する更新権限を拒否し、不変フィールドを更新しないストアド プロシージャ (ユーザーには実行権限がある) を作成することです。

于 2012-08-28T22:29:22.523 に答える