この記事は、Huawei クラウド コミュニティ「GaussDB (DWS) 3A Security Capabilities」(著者: yd_281561943) から共有されたものです。
1 はじめに
- 対象バージョン:[8.0.0(以降)]
データベース セキュリティとは、権限のないユーザーがデータベース内のデータ情報を盗んだり、改ざんしたり、破壊したりするのを防ぐためにデータベースを保護するテクノロジーを指します。データベース セキュリティ テクノロジは、次の 3 つの A に簡単に分類できます。
- 認証: 認証は、誰が入場を許可されるかという問題を解決します (エントリ)
- 認可:何ができるか(仕事)の問題を解決するための認可
- 監査: 監査は、何が行われたかの問題を解決します (モニタリング)
2. 認証——認証
接続認証は、ユーザーがデータベースにログインできるかどうかの問題を解決します。本製品は以下の認証方式をサポートしています。
- ホストベースの認証: サーバーは、クライアントの IP アドレス、ユーザー名、およびアクセスするデータベースに基づいて構成ファイルをチェックし、ユーザーが認証に合格したかどうかを判断します。
- パスワード認証: リモート接続の暗号化パスワード認証とローカル接続の非暗号化パスワード認証を含みます。
- 証明書認証: このモードでは SSL 接続構成が必要で、クライアントは有効な SSL 証明書を提供する必要がありますが、ユーザー パスワードは必要ありません。
- サードパーティ認証: ldap、oneaccess など。
これらの方法はすべて、「pg_hba.conf」ファイル (pg_hba.conf ファイル形式) を設定する必要があります。pg_hba は、複数の HBA レコード行で構成されます。
HBA レコードの意味は、どのユーザー (USER) が許可されるか、どの IP アドレス (ADDRESS)、どの接続タイプ (TYPE)、どの認証方法 (METHOD)、どのデータベース (DATABASE) への接続が許可されるかということです。
認証中、接続要求ごとに hba ファイル内のレコードが下から順にチェックされ、現在のレコードが一致する場合は、そのレコードが返されます。 HBA レコードの順序は非常に重要です。 hba のこのロジックは非常に重要なので、簡単に変更すべきではありません。変更しないと、非常に深刻な問題が発生します。
ケース: HBA ロジックの変更によって引き起こされる問題
アップグレード プロセス中に ldap 接続に問題が発生し、pg_hba.conf ファイル内のレコードがソートされ、アップグレードの前後で ldap 設定行の順序が sha256 設定行の最後に変更されました。 pg_hba.conf の順次トラバーサル メカニズムにより、アップグレード後、ldap ユーザーが sha256 構成行と誤って一致し、接続が失敗します。
順序の変更によって生じる問題を解決するために、修正計画の最初のバージョンでは、ループのトラバーサルの先頭に ldap 判定ロジックを配置します。まず、認証タイプが ldap 認証であるかどうかを確認します。構成行のメソッドフィールドは ldap です。そうでない場合は、メソッドが ldap であることが判明するまで次の行に進みます。
このバージョンの変更計画では、LDAP 認証接続はすべての LDAP HBA レコードと一致します。ユーザーがデータベースに接続すると、接続は成功しますが、業務は実行できず、「ユーザー名/パスワードが無効です。ログインは拒否されました。」というエラー メッセージが報告されます。その理由は、内部ノードがステートメントを実行するときに、ノード間の認証が実行され、認証タイプが信頼され、パスワードが提供されないためです。変更後は、ldap レコードのみが照合され、ldap メソッドにはパスワードが必要となるため、エラーが報告されます。
アップグレードの前後で、ldap および sha256 構成行の場所は次のとおりです。
アップグレードする前に: すべてをホスト @/etc/ldap/ldap_user 0.0.0.0/0 ldap ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com" ホスト すべて すべて 0.0.0.0/0 sha256 アップグレード後: ホスト すべて すべて 0.0.0.0/0 sha256 すべてをホスト @/etc/ldap/ldap_user 0.0.0.0/0 ldap ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com"
TYPE : type は、local、host、hostssl、および hostnossl の 4 つのタイプのいずれかです。
それぞれ:
local: UNIX ドメイン ソケット接続のみが許可されます。
host: TCP/IP 接続を許可し、SSL 接続リクエストと非 SSL 接続リクエストを一致させることができます。
hostssl: TCP/IP 接続を許可し、SSL 接続要求のみに一致します。
hostnossl: TCP/IP 接続を許可し、非 SSL 接続要求のみに一致します。
DATABASE : all を使用してすべてのデータベースを表すことも、データベースをカンマで区切って明示的に指定することもできます。
USER : all を使用してすべてのユーザーを表すことも、ユーザーをカンマで区切って明示的に指定することもできます。特定のデータベース ユーザーの名前、または + を先頭に付けたグループ名を指定できます。 + マークは実際には「このロールに直接的または間接的に属する任意のロールと一致する」ことを意味しますが、+ マークのない名前はその特定のロールのみと一致します。
ADDRESS : 宣言レコードが一致し、アクセスを許可するアドレス。タイプがローカルの場合、ローカル接続を意味し、IP アドレスを指定する必要はありません。
METHOD : 認証方法には、trust、reject、md5、sha256、ldap、cert、oneaccess などが含まれます。
trust: ホワイトリスト、無条件に接続を許可します。
拒否: ブラックリストに登録し、無条件に接続を拒否します。
md5: pg のパスワード認証方法は安全ではありません。
sha256: gaussdb のパスワード認証。
ldap: サードパーティ認証に LDAP を使用します。
cert: クライアント証明書認証モード。このモードでは SSL 接続構成が必要であり、クライアントは有効な SSL 証明書を提供する必要があります。
oneaccess: サードパーティ認証に oneaccess を使用します。3.認可——認可
権限は、データベース オブジェクトに対するユーザーの操作が許可されているかどうかを示します。 GaussDB (DWS) のアクセス許可には、システム アクセス許可、データ オブジェクト アクセス許可、およびユーザー アクセス許可の 3 つのシナリオが含まれます。
3.1 システム権限
3.1.1 三権分立
デフォルトでは、SYSADMIN 属性を持つシステム管理者がシステム上で最高の権限を持ちます。実際の業務管理においては、システム管理者の権限が過度に集中することによる高いリスクを回避するため、三権分立を設定し、セキュリティ管理者にシステム管理者の CREATEROLE 属性、監査管理者に AUDITADMIN 属性の権限を付与することが可能です。 。
3.1.2 システム権限認可
システム権限は、SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN、LOGIN などのユーザー属性とも呼ばれます。
ロールまたはユーザーを作成または変更するときにシステム権限を認可できます。CREATE/ALTER ROLE/USER user_name [WITH] オプション ステートメントのオプションで、次のフィールドを設定してシステム権限認可を実装できます。
システム管理者 |ノシサドミン
新しい役割が「システム管理者」であるかどうかを確認します。SYSADMIN 属性を持つ役割がシステム上で最も高い権限を持っています。デフォルトは NOSYSADMIN です。
監査管理者 |ノーオーディタミン
ロールに監査管理属性があるかどうかを定義します。デフォルトは NOAUDITADMIN です。
作成DB | NOCREATEDB
新しいロールがデータベースを作成できるかどうかを決定します。新しいロールにはデータベースを作成する権限がありません。デフォルトは NOCREATEDB です。
クリエーターロール |ノクレアテロール
ロールが新しいロールを作成できるかどうかを決定します (つまり、CREATE ROLE および CREATE USER を実行します)。 CREATEROLE 権限を持つロールは、他のロールを変更および削除することもできます。デフォルトは NOCREATEROLE です。
ログイン |ノログイン
LOGIN 属性を持つロールのみがデータベースにログインできます。 LOGIN 属性を持つロールはユーザーとみなされます。デフォルトは NOLOGIN です。3.2 データオブジェクトの権限
データ オブジェクトには、テーブルとビュー、指定されたフィールド、データベース、関数、スキーマなどが含まれます。データ オブジェクトの作成、追加、削除、変更、クエリなどの操作は、データ オブジェクトのアクセス許可です。認可構文形式は GRANT [privileges] ON [objects] TO [users]、権限取り消し構文形式は REVOKE [privileges] ON [objects] FROM [users] です。
3.3 ユーザー権限
3.3.1 ユーザー権限の認可
1 つのロールまたはユーザーの権限を 1 つ以上の他のロールまたはユーザーに付与します。承認されたロールまたはユーザーは、承認されたロールまたはユーザーの権限を持ちます。 WITH ADMIN OPTION が宣言されている場合、許可されたユーザーは、他のロールまたはユーザーに権限を再度付与し、そのロールまたはユーザーによって継承されたすべての権限を取り消すことができます。承認されたロールまたはユーザーが変更または取り消されると、そのロールまたはユーザー権限を継承するすべてのユーザーの権限もそれに応じて変更されます。構文形式は GRANT role TO user です。
3.3.2 プリセットの役割
GaussDB (DWS) は、「gs_role_」で始まる名前の一連のプリセット ロールを提供します。これらのプリセット ロールには、いくつかの固定された権限があります。一部のユーザーが関連操作を実行する必要がある場合、事前に設定されたロールをユーザーに付与するだけで済みます。 GaussDB (DWS) の現在のプリセット ロールは次のとおりです。
4.監査——監査
監査とは、ユーザーのログインと終了、およびログイン後のデータベースの動作や操作を記録し、データベースのセキュリティ管理者がこれらのログ情報を使用して、不正な操作を行ったユーザー、時刻、内容を調査することを指します。
4.1 監査設定項目の設定
データベースで特定の機能を監査できるようにするには、監査メイン スイッチ (audit_enabled) と対応する監査項目スイッチ (audit_operation_exec) をオンにする必要があります。両方とも、データベース操作中にこの構成項目の値を変更すると有効になります。すぐにデータベースを再起動する必要はありません。
注意すべき点が 2 つあります。1 つ目は、ddl 操作を監査する場合、特定のオブジェクトの ddl 操作を監査するように Audit_system_object を構成する必要があることです。2 つ目は、トランザクションを監査する場合、トランザクション内の操作が監査されるかどうかによって異なります。特定の構成項目が構成されます。監査項目のパラメータ制御:
4.2 監査ログの表示
監査クエリ コマンドは pgxc_query_audit です。
select * from pgxc_query_audit(timestamptz starttime,timestamptz endtime,audit_log);
starttime と endtime は、それぞれ監査レコードの開始時刻と終了時刻を表します。 Audit_log は、表示される監査ログの新しい物理ファイル パスを表します。監査クエリの結果は次のとおりです。
postgres=# テーブル t1(id int) を作成します。 エラー: リレーション「t1」はすでに存在します postgres=# select * from pgxc_query_audit('2021-03-21','2021-03-30') order by endtime desc limit 1; -[ 記録 1 ]---+-------------------------------- 開始時間 | 2021-03-21 11:49:41.643+08 終了時間 | 2021-03-21 11:49:41.652+08 操作タイプ | ddl 監査タイプ | ddl_table 結果 |失敗した ユーザー名 |ペルファドム データベース |ポストグレ クライアント接続情報 | gsql@[ローカル] オブジェクト名 | t1 コマンドテキスト |テーブル t1(id int) を作成します。 詳細情報 |リレーション「t1」はすでに存在します トランザクションxid | 0 クエリID | 1062177 ノード名 | cn_5001 スレッドID | 139916885260032@669613657906735 ローカルポート | 6000 リモートポート |
5. その他のデータ ウェアハウス セキュリティ テクノロジ
データセキュリティ表示: データの非感作、行レベルのアクセス制御。
データ セキュリティ ストレージ: データ ストレージの暗号化、透過的な暗号化。