MLSQLコンパイル時権限制御例の詳細な説明

MLSQLコンパイル時権限制御例の詳細な説明

序文

MySQL の権限を簡単に理解すると、MySQL では自分の能力の範囲内で操作が許可され、その限度を超えることはできないということです。

権限制御は MLSQL のライフラインと同じくらい重要です。 MLSQL は、MySQL、Oracle、HDFS、Hive、Kafka、Sorl、ElasticSearch、Redis、API、Web などのさまざまなリソースにアクセスする必要があります。ユーザーごとに、これらのデータ ソース (およびテーブルと列) に対する権限が異なります。

従来のモデルでは、各ユーザーにプロキシ ユーザーが必要であり、各データ ソースでこのプロキシ ユーザーを承認する必要があります。 これは面倒に思えるかもしれませんが、実際には基本的に実装が困難です。さまざまなデータ ソースがさまざまなチームにあるため、アプリケーション プロセス全体に数日、場合によっては数週間かかることがあります。
上記の問題が気が滅入るものであるならば、Hive をデータ ウェアハウスとして使用している企業にとって、Hive へのアクセス権はさらに絶望的なものとなるかもしれません。 Hive の認証モデルは Linux ユーザーに従います。つまり、Spark を起動した人は誰でもアクセス権を持ちます。これは、マルチテナント MLSQL アプリケーションではまったく実現不可能です。たとえば、Spark は sparkUser によって起動されますが、実際の実行者は Zhang San、Li Si などである可能性があります。 Hive は、タスクを完了したのが sparkUser であったことのみを知ることはできません。

誰もが感じるかもしれないもう一つの点があります。

非常に苦労してスクリプトを作成し、1 時間実行したところ、突然失敗しました。350 行目でアクセスしたデータ ソースに十分な権限がないことが判明しました。 これは本当に迷惑です。

ここで問題が起こります

では、スクリプトを実行する前に、スクリプトに関係するすべてのリソースが承認されているかどうかをどのように確認できるでしょうか?

答えは「はい」です

話題外ですが、 MLSQL は本質的にはコンパイルを必要としない解釈実行言語であるため、タイトルは厳密ではありません。より適切なタイトルは [解析中の権限制御] です。

MLSQL で権限検証が有効になっている場合、最初にスクリプト全体をスキャンし、さまざまなデータ ソースに関する詳細情報を含む必要な情報を抽出します。これにより、実行前に許可されていないライブラリやテーブルにアクセスしたかどうかを確認できます。では、MLSQL はどのようにそれを実現するのでしょうか?次の情報を見てみましょう。

JDBCを接続する場所
ドライバー="com.mysql.jdbc.Driver"
および url="jdbc:mysql://${ip}:${host}/db1?${MYSQL_URL_PARAMS}"
および user="${user}"
パスワード="${password}"
db1_ref として;

jdbc.`db1_ref.people` をロードします
人として;

追加した人を jdbc.`db1_ref.spam` として保存します。

MLSQL では、すべてのデータ ソースをロード ステートメントを使用してロードする必要があるためです。ロード ステートメントを解析すると、MLSQL はユーザーが現在 JDBC プロトコルに基づいてデータ ソースにアクセスしていることを認識し、URL を通じてこの情報を取得します。

デシベル:デシベル1
表: 人
操作タイプ: ロード
ソースタイプ:mysql
テーブルタイプ: JDBC

もちろん、このスクリプトのユーザーはスパム テーブルも作成し、情報も抽出されます。

デシベル:デシベル1
表: 人
操作タイプ: 保存
ソースタイプ:mysql
テーブルタイプ: JDBC

次に、一時テーブル people があるため、このスクリプトには合計 3 つの情報テーブルがあり、これらは AuthCenter に送信されて判断されます。AuthCenter は、現在のユーザーに対してどのテーブルが承認されていないかを MLSQL に伝えます。承認されていないテーブルが見つかった場合、MLSQL は直接例外をスローします。プロセス全体を通して、物理的なプランはまったく実行されず、スクリプトからの情報抽出のみが行われます。

MLSQL では、SELECT ステートメントで Hive テーブルにアクセスすることはできません。Hive テーブルは、LOAD ステートメントを通じてのみロードできます。たとえば、次のステートメントはエラーを報告します。

public.abc から * を table1 として選択します。

select ステートメントでは public.abc ライブラリにアクセスできません。これを使用する必要がある場合は、次のように実行できます。

hive.`public.abc` を abc としてロードします。
abc から * を table1 として選択します。

列レベルの制御を実装する方法

MLSQL はロード ステートメントを解析するときに、現在のユーザーに、どのテーブルがアクセスされ、どの列が承認されているかを尋ねます。次に、最後のロード ステートメントを書き換えて、ユーザーがアクセスを許可されている列のみを含む新しいビューを提供します。

要約する

いくつかの効果的な制限により、MLSQL は構文解析レベルですべてのデータ ソース関連情報を直接抽出し、対応する許可センターに送信して判断し、実行時の承認拒否の問題を回避できます。 MLSQL によるこの動きは非常に重要です。これにより、MLSQL システムは基盤となるシステムの権限制御に完全に依存しなくなり、問題が大幅に簡素化されます。

さて、今回の記事は以上です。この記事の内容が皆さんの勉強や仕事に少しでも参考になれば幸いです。123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL データベースのリモート アクセス権を有効にする方法 (2 つの方法)
  • MySQLデータベースのリモートアクセス権限を設定する方法の概要
  • mysql ユーザーの追加、削除、権限の割り当て
  • MySQL ユーザーの作成、承認、取り消しの方法
  • MYSQL でトリガー権限を設定する問題を解決する方法
  • CentOS MySQL 5.7 のコンパイルとインストールの詳細な手順
  • Linux で MySQL 5.5 をコンパイルしてインストールする簡単な手順
  • CentOS で MySQL エラー ソリューションをコンパイルしてインストールする

<<:  Linux 仮想マシンの IP アドレスを変更し、ゲートウェイを確認し、ネットワーク環境を構成する方法に関するチュートリアル

>>:  Axios はリクエストをキャンセルし、重複リクエストを回避します

推薦する

JavaScript の非同期処理で待機時間を節約できますか?

JavaScriptで非同期実行の結果を同期的に取得するには、 for ループ内でawaitを使用...

Dockerを使用して開発環境を構築する方法を素早く習得します

プラットフォームが成長し続けるにつれて、プロジェクトの研究開発は、開発者向けのさまざまな外部環境、特...

Dockerはポートを介してコンテナに接続します

Dockerコンテナ接続1. ネットワークポートマッピングPythonアプリケーション用のコンテナを...

Centos7 Zabbix3.4 メールアラーム設定(メール内容がxx.bin添付ファイルになる問題の解決)

目次1. 監視Linuxホストを追加する2. メールボックスを設定する1. 監視Linuxホストを追...

LinuxシステムのAnsible自動運用保守導入方法

Ansible は、Python をベースに開発された新しい自動運用・保守ツールです。 多くの古い運...

Linuxでシンボリックリンクを削除(削除)するコマンド

Linux では、シンボリック リンクを作成または削除する必要がある場合があります。もしそうなら、何...

私の CSS フレームワーク - base.css (ブラウザのデフォルト スタイルをリセット)

コードをコピーコードは次のとおりです。 @文字セット "utf-8"; /* @...

VMware 仮想マシンのインストール win7 オペレーティング システム チュートリアル ダイアグラム

VMwareaのインストールプロセスは説明しませんが、主にwin7イメージをロードする方法を説明しま...

Centos7 システムでの python2 と python3 の共存

最初のステップは、Python のバージョン番号とインストール パスを確認することです。 上記のビュ...

Lua モジュールを使用して WAF を実装する Nginx の原理の分析

目次1. WAFの背景2. WAFとは3. 動作原理4. WAF機能5. WAFと従来のファイアウォ...

MySQL 8.0 オンライン DDL クイック列追加の概要

目次問題の説明MySQLオンラインDDLで列を追加する従来の方法01 コピー方法02 インプレースメ...

Linuxでのソフトウェア(ライブラリ)の更新コマンドの詳しい説明

Ubuntu サーバーにパッケージをインストールする場合、sudo apt-get install ...

Ubuntu 20.04 オペレーティング システムの VMware インストール チュートリアル図

メモ: とにかく体験してみましょう。記録: NO.209この例の環境:仮想マシン: vmwareオペ...

JavaScriptはボタンをクリックして4桁のランダムな検証コードを生成します

この記事の例では、ボタンをクリックすることで4桁のランダムな検証コードを生成するjsの具体的なコード...

コードブロックのハイライトをコピーして表示できる js プラグイン highlight.js + clipboard.js 統合

主に2つの側面から: 1. ハイライト/改行2. コードのコピーボタンこれら両方には既製のプラグイン...