共通のスキーマでいくつかのデータを共有する 2 つのアプリケーションを構築しています。MySQL を RDBMS として使用しています。これが私の最初のスキーマです(test_schema_1
):
そして 2 番目 ( test_schema_2
):
最近、複数のスキーマ間で JOIN を実行できることを知りました。root ユーザー (すべてに無制限にアクセスできる) に接続している場合は、次のようにします。
SELECT * FROM
TEST_SCHEMA_2.USERS U
JOIN TEST_SCHEMA_1.MASTER_USERS MU ON U.MASTER_ID = MU.ID
JOIN TEST_SCHEMA_2.ROLES R ON U.ROLE_ID = R.ID
WHERE MU.APP_ID = 'darth_vader@death.star';
そして、私が期待するものを手に入れましょう!私はこのデザインで生産に行くことを考えているので、これは私にとって非常にクールに見えます.
しかし、そのような設計のパフォーマンスへの影響を少し恐れていますか? これは良い考えですか?将来、別のマシンでデータベースを (MongoDB 用語で) 分割することにした場合はどうなりますか?
また、セキュリティの問題も気になります。現在、スキーマごとに個別のユーザーがいます。
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
% test_schema_1 t1 Y Y Y Y N N N N N N N N N N N N N N Y
localhost test_schema_1 t1 Y Y Y Y N N N N N N N N N N N N N N Y
% test_schema_2 t2 Y Y Y Y N N N N N N N N N N N N N N Y
localhost test_schema_2 t2 Y Y Y Y N N N N N N N N N N N N N N Y
したがって、ユーザーt1
はから読み取ることができないと思いますtest_schema_2
。しかし、上記のクエリは機能します。彼は挿入することさえできますtest_schema_2
:
SELECT USER();
INSERT INTO TEST_SCHEMA_2.ROLES(ID, NAME) VALUES(4, 'TEST');
...
USER()
t1@localhost
-------------------------------------------
Updated Rows
1
私は何が欠けていますか?