以下是我所描述的表格及其内容:
用户:
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| public_key_path | varchar(100) | NO | | NULL | |
| email | varchar(50) | NO | | NULL | |
| pbox | varchar(50) | YES | UNI | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
内容:
+----+-------------------+----------------------+--------+
| id | public_key_path | email | pbox |
+----+-------------------+----------------------+--------+
| 33 | /path/to/pubkey1/ | FirstUser@email.com | Pbox01 |
| 34 | /path/to/pubkey2/ | SecondUser@email.com | Pbox02 |
| 35 | /path/to/pubkey3/ | ThirdUser@email.com | Pbox03 |
+----+-------------------+----------------------+--------+
文件:
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| file_path | varchar(100) | NO | UNI | NULL | |
| owner_id | int(11) | NO | MUL | NULL | |
+-----------+--------------+------+-----+---------+----------------+
内容:
+-----+-----------------+----------+
| id | file_path | owner_id |
+-----+-----------------+----------+
| 104 | /path/to/file1/ | 33 |
| 105 | /path/to/file2/ | 34 |
| 106 | /path/to/file3/ | 35 |
| 107 | /path/to/file4/ | 33 |
| 108 | /path/to/file5/ | 33 |
| 109 | /path/to/file6/ | 34 |
+-----+-----------------+----------+
encrypted_symmetric_keys:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| key_path | varchar(100) | YES | UNI | NULL | |
| file_id | int(11) | NO | MUL | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
+----------+--------------+------+-----+---------+----------------+
内容:
+-----+---------------------+---------+---------+
| id | key_path | file_id | user_id |
+-----+---------------------+---------+---------+
| 106 | /path/to/key1forU1/ | 104 | 33 |
| 107 | /path/to/key2forU2/ | 105 | 34 |
| 108 | /path/to/key3forU3/ | 106 | 35 |
| 109 | /path/to/key4forU1/ | 107 | 33 |
| 110 | /path/to/key5forU1/ | 108 | 33 |
| 111 | /path/to/key6forU2/ | 109 | 34 |
| 112 | /path/to/key3forU1/ | 106 | 33 |
| 113 | /path/to/key2forU1/ | 105 | 33 |
| 114 | /path/to/key6forU1/ | 109 | 33 |
+-----+---------------------+---------+---------+
这是一个服务器的新手数据库,用于存储使用加密对称密钥(ESK)加密的文件路径。
如果有key_path /path/to/key1forU1/
,则意味着为user1存储了file1的密钥
我需要一个查询,当给定file_path(例如“/ path / to / file1 /”)时,列出所有有权访问该文件的用户。
如果您需要更多信息,请告诉我,我会立即提供
我知道这是一个非常本地化的问题,但我现在已经考虑了一个多小时了,而且围绕着我的头部我遇到了可怕的问题。
非常感谢你。
编辑:
我需要的最后一组数据是,给出时
'/路径/到/ file1的/'
会回来的
FirstUser@email.com
但是举个例子时给出了
/路径/到/ file2的/”
会回来的
FirstUser@email.com
SecondUser@email.com
因为
答案 0 :(得分:0)
我认为这就是你要找的东西
因为这将为您提供使用file_path = '/path/to/file6/'
的所有电子邮件,但所有者的电子邮件除外
SELECT su.email
FROM encrypted_symmetric_keys AS c
INNER JOIN users AS su ON su.id = c.user_id
INNER JOIN files AS f ON f.id = c.file_id AND f.owner_id <> c.user_id
WHERE f.file_path = '/path/to/file6/'