2010-05-17 13 views
5

Ho installato PL/Python sul mio server PostgreSQL sotto postgres privilleges:PostgreSQL: Esecuzione di procedure Python memorizzato come un normale utente

netherlands=# CREATE PROCEDURAL LANGUAGE plpythonu; 
CREATE LANGUAGE  

Ora ho bisogno di concedere le autorizzazioni in modo da poter usare come un utente normale :

netherlands=# GRANT ALL ON LANGUAGE plpythonu TO adam; 
ERROR: language "plpythonu" is not trusted 
HINT: Only superusers can use untrusted languages. 

so che python non è un linguaggio 'di fiducia', ma io sono disposto a prendere le mie possibilità qui. Qualche modo per convincere PostgreSQL a farmi eseguire le stored procedure di Python come un normale utente?

+0

GRANT [uso] sulle lingue significa che l'utente in questione può creare funzioni in quella lingua. Una volta creato, è necessario utilizzare GRANT EXECUTE per consentire ad altri utenti di utilizzarli. –

+0

Non funziona, con lo stesso messaggio di errore menzionato sopra. –

risposta

7
UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpythonu'; 
+0

È una nuova funzionalità? –

+0

Funziona in 9.1, almeno. Non sono sicuro delle versioni precedenti. – claymation

+0

Quindi per me è nuovo, sto lavorando con 8.4. Comunque, la contrassegnerò come la risposta corretta per le generazioni a venire :-) –

1

Sfortunatamente, non credo che sia possibile eseguire interpreti non fidati a meno che l'account Postgres non abbia accesso superutente. Se sei l'amministratore del server database, createuser ti chiederà se il nuovo account deve essere superutente.

Il flag "non affidabile" non significa che il runtime è instabile o inaffidabile, semplicemente che il suo modello di sicurezza non si adatta molto bene come interprete di stored procedure. Ciò potrebbe comportare l'escalation dei privilegi delle procedure memorizzate o potenziali bug di sicurezza potenzialmente disastrosi.

Se non è possibile eseguire come utente postgres o creare un account superutente, temo che si debba saltare pl/python e suggerire di estrarre invece pl/pgsql. http://www.postgresql.org/docs/8.3/interactive/plpgsql.html

1

GRANT [USEGE] in lingue significa che l'utente in questione può creare funzioni in quella lingua. Una volta creato, è necessario utilizzare GRANT EXECUTE per consentire ad altri utenti di utilizzarli.

[email protected]:~$ psql 
Welcome to psql 8.3.9, the PostgreSQL interactive terminal. 

Type: \copyright for distribution terms 
     \h for help with SQL commands 
     \? for help with psql commands 
     \g or terminate with semicolon to execute query 
     \q to quit 

postgres=# \c plpythonu_test 
You are now connected to database "plpythonu_test". 
plpythonu_test=# create language plpythonu; 
CREATE LANGUAGE 
plpythonu_test=# CREATE FUNCTION pymax (a integer, b integer) 
plpythonu_test-# RETURNS integer 
plpythonu_test-# AS $$ 
plpythonu_test$# if a > b: 
plpythonu_test$#  return a 
plpythonu_test$# return b 
plpythonu_test$# $$ LANGUAGE plpythonu; 
CREATE FUNCTION 
plpythonu_test=# grant execute on function pymax (a integer, b integer) to plpythonu_test; 
GRANT 
plpythonu_test=# 



C:\Users\milen>psql.exe -U plpythonu_test -h ... 
Password for user plpythonu_test: 
psql (8.4.4, server 8.3.9) 
WARNING: psql version 8.4, server version 8.3. 
     Some psql features might not work. 
WARNING: Console code page (866) differs from Windows code page (1251) 
     8-bit characters might not work correctly. See psql reference 
     page "Notes for Windows users" for details. 
Type "help" for help. 

plpythonu_test=> select pymax(1,2); 
pymax 
------- 
    2 
(1 row) 


plpythonu_test=> 
Problemi correlati