2016-04-15 8 views
0

ich mit diesen drei Tabellen eine Eigentumswohnung Datenbank unter Postgres täte (unter anderem) Die Tabellen nur mit dem PK aufgeführt sind und der in meinem Problem beteiligt FK um den Code zu vereinfachenGRANT Privilegien auf untergeordnete Tabelle, die bestimmten übergeordnete

TableName: Administrator 
PK: admin_id 

TableName: Condo 
PK: condo_id 
FK: admin_id (Connects with Administrator of this condo) 

TableName: Property 
PK: property_id 
FK: condo_id (Connects with parent condo) 

, sich nun vor, es ist ein Administrator mit ADMIN_ID = 1 und ich eine SQL-Benutzer für ihn, zum Beispiel:

CREATE ROLE "john_smith" 
LOGIN PASSWORD '123456' 
VALID UNTIL 'infinity'; 

So, jetzt will ich ihn nur, um die Eigenschaften zu aktualisieren, um eine Wohnung bezogen, das hat er als Administrator (admin_i d = 1)

Wie könnte ich so etwas wie

GRANT SELECT, INSERT, UPDATE, DELETE 
ON Property 
WHERE "The Properties of a Condo with admin_id = 1" 
TO "john_smith" 

Das ist die Frage, danke!

+0

Welche DBMS sind Sie mit? SQL Server? MySQL? – steoleary

+0

Sorry, ich habe nicht angegeben, ich füge es auf die Frage – jsertx

Antwort

0

Es ist möglich, es auf Postgress zu tun und diese Row Security Policies

genannt Aber Sie haben nicht genug Informationen über die DB haben eine klare Antwort geschrieben.

Die Idee ist, dass Sie bestimmte ROLES erstellen haben, dass GROUPS von USERS

In Ihrem Beispiel sind erstellt man nur eine Benutzer Rolle. Sie sollten AdministratorenBenutzergruppe hinzufügen und Ihre Admin-Benutzer hinzufügen.

Dann tun Sie so etwas wie

ALTER TABLE Property ENABLE ROW LEVEL SECURITY; 

CREATE POLICY Property_Administrator ON property TO Administrators 
    USING (SELEcT true FROM condo WHERE condo.condo_id=property.condo_id AND condo.admin_id= current_user); 

einfach das doc las ich verbunden und Sie werden es erreichen ziemlich einfach

+0

ist es fast in Ordnung, aber das Problem ist, dass die admin_id nicht auf Property ist, ist es auf Eigentumswohnung (A communitty Gruppe von Eigenschaften), aber ich werde mich umsehen Zeilensicherheitsrichtlinien, danke! – jsertx

+0

@jsertx Ich habe die Frage tatsächlich zu schnell gelesen. Ich habe die Abfrage 'create policy' entsprechend angepasst. Ich denke, dass es den Trick tun sollte –

+0

vielen Dank, es hat perfekt funktioniert – jsertx

Verwandte Themen