(歡迎提供更好或更具描述性標題的建議)。PostgreSQL涉及視圖或加入選擇的行級安全
我不知道以下是否可能在PostgreSQL中使用RLS(或任何其他機制)。我希望用戶能夠更新表的某些行,如果其用戶名與另一個表中的列匹配的話。在下面的示例中,我希望用戶nene
(在表t0
中顯示爲列u
)能夠更新表t2
中的列a
和p
。我想要表達的是對t2中的行應用策略,並通過以下select語句匹配:SELECT a, p FROM t2 INNER JOIN t1 ON (t2.t1id = t1.id) INNER JOIN t0 ON (t1.t0id = t0.id) WHERE t0.u = 'nene';
這可能嗎?有關如何進行的任何建議?一個明顯的解決方法是在表t2上覆制用戶名,但是會在t2上添加無關信息,並且需要執行額外的約束。
這裏是我的三個表(實際情況下有更多的字段,並且表t1不能被分解出來;我將它留在示例中,因爲需要兩個聯接可能會改變解決方案空間)。
表
t0
與CREATE TABLE t0 (id TEXT PRIMARY KEY, u TEXT UNIQUE, pn TEXT);
創建,現在包含:=> SELECT * FROM t0; id | u | pn ------+------+------ b321 | toto | fifi a421 | nene | xuxu (2 rows)
表
t1
與CREATE TABLE t1 (id TEXT PRIMARY KEY, t0id TEXT REFERENCES t0(id), pn TEXT);
創建,現在包含:=> SELECT * FROM t1; id | t0id | pn ------+------+------ x99 | a421 | lala zy49 | a421 | popo l2l | b321 | nipa (3 rows)
表
t2
與CREATE TABLE t2 (id TEXT, t1id TEXT REFERENCES t1(id), a INET, p INT);
和創建現在包含=> SELECT * FROM t2; id | t1id | a | p ------+------+-------------+------- 1264 | x99 | | 1267 | zy49 | | 1842 | l2l | 192.0.200.3 | 31337 1234 | x99 | 10.0.0.89 | 23 (4 rows)
感謝。它需要在t0和t1上添加相應的權限,但這正是我需要理解這種工作方式的線索。 – JayEye