質問:
私はmySQLにかなり慣れていないので、どこから始めればよいかさえわかりません。多くのテーブルに分散された値に基づいて true または false を返す単純な関数を作成する方法を知りたいです。
詳細:
これが私のテーブルの関連部分です(すべてのエンジンは ですinnodb
)。読み進めていくと、データベースはユーザー、グループ、ファイル、およびそれらのユーザー/グループのそれらのファイルに対する権限を格納しているだけであることがわかります。
ユーザーテーブル:
CREATE TABLE IF NOT EXISTS USER
(
ID INT NOT NULL auto_increment,
PRIMARY KEY(ID)
)
グループテーブル:
CREATE TABLE IF NOT EXISTS GROUP
(
ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(ID)
)
グループ メンバーシップ テーブル:
CREATE TABLE IF NOT EXISTS GROUPMEMBERSHIP
(
ID INT NOT NULL AUTO_INCREMENT,
USERID INT NOT NULL,
GROUPID INT NOT NULL,
UNIQUE ( USERID, GROUPID ),
PRIMARY KEY(ID),
FOREIGN KEY (USERID) REFERENCES USER(ID),
FOREIGN KEY (GROUPID) REFERENCES GROUP(ID)
)
FILE テーブル: (R、W、X、はother
)
CREATE TABLE IF NOT EXISTS FILE
(
ID INT NOT NULL AUTO_INCREMENT,
READ BOOLEAN DEFAULT FALSE,
WRITE BOOLEAN DEFAULT FALSE,
EXECUTE BOOLEAN DEFAULT FALSE,
PRIMARY KEY(ID)
)
ファイル ユーザー権限テーブル:
CREATE TABLE IF NOT EXISTS FILEUSERPERMISSIONS
(
ID INT NOT NULL AUTO_INCREMENT,
FILEID INT NOT NULL,
USERID INT NOT NULL,
READ BOOLEAN DEFAULT FALSE,
WRITE BOOLEAN DEFAULT FALSE,
EXECUTE BOOLEAN DEFAULT FALSE,
UNIQUE (FILEID, USERID),
PRIMARY KEY(ID),
FOREIGN KEY (FILEID) REFERENCES FILE(ID),
FOREIGN KEY (USERID) REFERENCES USER(ID)
)
ファイル グループ権限テーブル:
CREATE TABLE IF NOT EXISTS FILEGROUPPERMISSIONS
(
ID INT NOT NULL AUTO_INCREMENT,
FILEID INT NOT NULL,
GROUPID INT NOT NULL,
READ BOOLEAN DEFAULT FALSE,
WRITE BOOLEAN DEFAULT FALSE,
EXECUTE BOOLEAN DEFAULT FALSE,
UNIQUE (FILEID, GROUPID),
PRIMARY KEY(ID),
FOREIGN KEY (FILEID) REFERENCES FILE(ID),
FOREIGN KEY (GROUPID) REFERENCES GROUP(ID)
)
hasPermission 関数:
DELIMITER $$
DROP FUNCTION IF EXISTS hasPermission$$
CREATE FUNCTION hasPermission(fileID INT, userID INT)
RETURNS BOOLEAN
BEGIN
???
END$$
DELIMITER ;
どうすればいいですか、または少なくともどこから関数を書き始めれば、次のhasPermission
ように照会されたときに次のようになります。
SELECT hasPermission( 123, 456)
以下を実行します。
- ファイル 123 が読み取り可能かどうかを確認します。
other
- ユーザー 456 がファイル 123 に対する読み取り権限を持っているかどうかを確認します。
- ユーザー 456 が、ファイル 123 に対する読み取り権限を持つグループに属しているかどうかを確認します。
最初のものはかなり些細なこと3つの中で最も些細なこと。2番目のものは私を困惑させました。3 つ目は、私にとって概念的な障壁です。これらすべてに加えて、明らかに、ユーザーやファイルが存在するかどうかを確認する必要があります。
私はMySQLの初心者なので、親切にしてください。
よろしくお願いします