7
votes

PostgreSQL: exécutant les procédures stockées Python en tant qu'utilisateur normal

J'ai installé pl / python sur mon serveur PostgreSQL sous postgres code> privilégilles: xxx pré>

Maintenant, je dois accorder des autorisations afin que je puisse l'utiliser comme une normale Utilisateur: P>

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


2 commentaires

Grant [USAGE] Dans les langues, l'utilisateur en question peut créer des fonctions dans cette langue. Une fois créé, vous devez utiliser Grant Execute pour permettre aux autres utilisateurs de les utiliser.


Ne fonctionne pas, avec le même message d'erreur mentionné ci-dessus.


3 Réponses :


1
votes

Malheureusement, je ne crois pas qu'il soit possible d'exécuter des interprètes non approuvés à moins que votre compte Postgres ait un accès superutilisateur. Si vous êtes l'administrateur de serveur de base de données, CreateUser vous demandera si le nouveau compte devrait être superutilisateur.

Le drapeau "non approuvé" ne signifie pas que l'exécution est instable ou peu fiable, simplement que son modèle de sécurité ne convient pas très bien à un interprète de procédure stocké. Cela pourrait entraîner une escalade de privilège de vos procédures stockées, ou des bugs de sécurité potentiellement désastreux.

Si vous ne pouvez pas exécuter en tant qu'utilisateur Postgres ou créer un compte superutilisateur, je crains que vous ne soyez à PL / Python et vous suggérez de vérifier à la place PL / PGSQL. http://www.postgresql.org/docs/8.3/interactive/plpgsql. HTML


0 commentaires

1
votes

Grant [USAGE] Dans les langues signifie que l'utilisateur en question peut créer des fonctions dans cette langue. Une fois créé, vous devez utiliser Accord Execute pour permettre aux autres utilisateurs de les utiliser.

postgres@dev:~$ 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=>


0 commentaires

9
votes
UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpythonu';

3 commentaires

Donc, c'est nouveau pour moi, je travaille avec 8.4. Cependant, je vais le marquer comme la bonne réponse pour les générations à venir :-)


Je viens de tenter cela sur Postgres 9.1 sur Ubuntu et je reçois l'erreur suivante - Erreur: relation "pl_language" n'existe pas


Désolé, la table est pg_language .