sql >> Databáze >  >> RDS >> PostgreSQL

oprávnění odepřeno při pokusu o čtení souboru csv pomocí JDBC pro postgresovou databázi

Provedli jste příkaz jako superuživatel v psql a jako jiný uživatel přes JDBC?
Příručka říká nám :

můžete obejít toto omezení zabalením příkazu do funkce s SECURITY DEFINER ve vlastnictví superuživatele. Buďte si vědomi bezpečnostních rizik . Můžete také chtít ODVOLAT všechna práva od veřejnosti a pouze GRANT vybraným uživatelům. Mohlo by to vypadat takto:

CREATE OR REPLACE FUNCTION foo()
  RETURNS void AS
$BODY$
    COPY data_1
    FROM E'C:\\Users\\Abhishek\\Desktop\\data1.csv'
    USING delimiters ',';
$BODY$
  LANGUAGE sql VOLATILE SECURITY DEFINER
  SET search_path = public, pg_temp;  -- or whatever schema the table is in

REVOKE ALL ON FUNCTION foo() FROM public;
GRANT SELECT ON FUNCTION foo() TO my_user;

Také mějte na paměti, že správnou syntaxi pro řídicí řetězce je:

E'C:\\Users\\Abhishek\\Desktop\\data1.csv'

Všimněte si E'...' .
Od verze 9.1 je nastavení standard_conforming_strings je ve výchozím nastavení zapnuto, vynucuje to.




  1. Poddotazy s EXISTS vs IN - MySQL

  2. Dvě vložení v PHP/MySQL pomocí LAST_INSERT_ID() a řádky z jiné tabulky

  3. 7 Možnosti pro povolení Pipes (||) jako operátora zřetězení v MariaDB

  4. Jak funguje rozsah zástupných znaků SQL Serveru, např. [A-D] s řazením rozlišujícím malá a velká písmena?