Inspiracja , wiedza , realizacja
Jsystems

W przebudowie

Login



Java

Oracle

Linux

Android

PostgreSQL

Microsoft SQL Server

Uprawnienia w PL/SQL – AUTHID

Data dodania: Jun 20, 2016
Data aktualizacji: Jun 20, 2016

Domyślnie wszelkie programy napisane w PL/SQL działają z uprawnieniami twórcy. To oznacza, że jeśli stworzę funkcję korzystającą z tabeli A będącej własnością użytkownika – twórcy lub wykorzystującą jego uprawnienia, a następnie nadam uprawnienia do wykonywania tej funkcji innemu użytkownikowi, to ten będzie mógł z niej korzystać nawet jeśli nie będzie posiadał dostępu do tabeli A ani uprawnień twórcy funkcji.

W ramach przykładu tworzę nowego użytkownika i nadaję mu standardowy zestaw uprawnień:




następnie z poziomu użytkownika HR tworzę nową funkcję korzystającą z tabeli w jego schemacie. Nadaję też uprawnienia do uruchamiania tej funkcji nowemu użytkownikowi MAPET.



Loguję się jako użytkownik MAPET i uruchamiam funkcję, mimo że ten użytkownik nie ma uprawnień do tabeli z której korzysta funkcja:



Wracam do sesji użytkownika HR i przebudowuję funkcję dodając do niej klauzulę „AUTHID CURRENT USER”. Ta klauzula sprawia, że funkcja będzie uruchamiana z uprawnieniami użytkownika wywołującego funkcję a nie twórcy.



Wracam do sesji użytkownika MAPET i ponownie uruchamiam funkcję. Tym razem funkcja nie zadziałała, ponieważ użytkownik mapet nie ma uprawnień do tabelki EMPLOYEES z której korzysta funkcja. Zamiast „CURRENT_USER” mógłbym napisać „DEFINER” co oznaczałoby korzystanie z uprawnień twórcy funkcji, ale takie ustawienie jest domyślne więc nie musimy tego robić.