SQL Server 付与

Sql Server Fu Yu



この記事では、SQL Server で GRANT ステートメントを使用して、セキュリティ保護可能なリソースに対するアクセス許可をプリンシパルに付与する方法を理解します。

SQL Server のセキュリティで保護されたプリンシパル

セキュリティ保護可能なリソースとは、SQL Server データベース エンジンの承認システムがアクセスを制御するリソースを指します。例として、データベース テーブルがあります。

プリンシパルは、SQL Server リソースへのアクセスを必要とするエンティティを指します。たとえば、テーブルに対するアクセス許可を要求するユーザーはプリンシパルです。







SQL Server 許可ステートメント

SQL Server での GRANT コマンドの構文を次に示します。



GRANT パーミッション
ON セキュリティ保護可能な TO メイン。

プリンシパルに割り当てる権限をコンマ区切りのリストとして指定する必要があります。



ON キーワードを使用すると、アクセス許可が適用されるセキュリティ保護可能なものを指定できます。最後に、TO キーワードを使用すると、ターゲット プリンシパルを設定できます。





たとえば、CREATE USER ステートメントを使用してユーザーを作成しても、そのユーザーの権限は定義されません。したがって、GRANT ステートメントを使用してそのユーザーの権限を設定することが不可欠です。

例を挙げてみましょう。



サンプルログインの作成

説明のためにサンプルログインを作成することから始めましょう。クエリは次のとおりです。

ログインlinuxhintを作成する
with password='password';

上記のコマンドは、ユーザー名 linuxhint と指定されたパスワードを持つユーザーを作成する必要があります。

サンプル データベースの作成

ログインを定義したら、ユーザーが存在するデータベースを作成できます。クエリは次のとおりです。

リゾルバーが存在する場合はデータベースを削除します。

データベース リゾルバを作成します。

リゾルバーを使用します。

エントリが存在する場合はテーブルを削除します。

テーブルエントリを作成します(
id int null ではない identity(1,
1) 主キー、
server_name varchar(50),
server_address varchar(255) NULL 以外、
compression_method varchar(100) デフォルト 'なし',
size_on_disk float が null ではない、
size_compressed フロート、
total_records int が null ではない、
init_date 日付
);
入れる
の中へ
ENTRIES(server_name,
サーバーアドレス、
圧縮方法、
size_on_disk,
size_compressed、
total_records、
init_date)

('MySQL','localhost:3306','lz77',90.66,40.04,560000,'2022-01-02'),
('Redis','localhost:6307','Snappy',3.55,998.2,100000,'2022-03-19'),
('PostgreSQL','localhost:5432','pglz',101.2,98.01,340000 ,'2022-11-11'),
('Elasticsearch','localhost:9200','lz4',333.2,300.2,1200000,'2022-10-08'),
('MongoDB','localhost:27017','Snappy',4.55,4.10,620000,'2021-12-12'),
('Apache Cassandra','localhost:9042','zstd',300.3,200.12,10000000,'2020-03-21');

ログイン用のユーザーを作成する

データベースとテーブルを作成したら、linuxhint ログイン用のユーザーを次のように作成できます。

リゾルバーを使用する
ユーザー linuxhint を作成します
ログイン用 linuxhint;

新規ユーザーとしてログイン

次に、新しく作成したユーザーとしてログインしましょう。コマンドは次のとおりです。

setuser 'linuxhint';

ログインしたら、select コマンドを実行してテーブルの表示を試みることができます。

エントリから * を選択します。

上記のクエリを実行すると、次のエラーが返されます。

メッセージ 229、レベル 14、状態 5、行 379
オブジェクト 'entries'、データベース 'resolver'、スキーマ 'dbo' に対する SELECT 権限が拒否されました。

これは、linuxhint ユーザーがデータベースに対する権限 (SELECT 権限を含む) を持っていないためです。

ユーザーに許可を与える

ユーザーがテーブルに格納されている情報を表示できるように、SELECT 権限を付与する必要があります。

そのためには、SQL Server の管理者アカウントでログインする必要があります。

次に、クエリを次のように実行します。

エントリの選択を linuxhint に許可します。

実行したら、linuxhint ユーザーとしてログインし、SELECT ステートメントを使用します。

エントリから * を選択します。

この場合、ユーザーが SELECT 権限を持っているため、コマンドはテーブルを返します。

次のように挿入や削除など、他の権限をユーザーに割り当てることもできます。

エントリの挿入、削除を linuxhint に許可します。

この場合、linuxhint ユーザーには、エントリ テーブルに対する SELECT、INSERT、および DELETE 権限が必要です。

結論

この投稿では、SQL Server での GRANT コマンドの使用法について調べました。このコマンドを使用すると、特定のプリンシパルに権限を割り当てることができます。