Security Deferer vs Security Invocatore
Il termine Definitore della sicurezza si riferiva ad alcune funzioni eccezionali utilizzate per svolgere attività uniche e privilegiate riguardanti la sicurezza del database in PostgreSQL. Queste attività sono così ufficiali e privilegiate che non tutti gli utenti possono eseguirli o usarli se è sicuro e sano. Questo può essere utilizzato come proprietà nella query PostgreSQL durante l'esecuzione di alcune transazioni dal database PostgreSQL. Quando una funzione è stata chiamata con i privilegi dell'utente che ha chiamato questa funzione, si dice che sia la proprietà invocatore di sicurezza delle funzioni. D'altra parte, quando una funzione è stata chiamata con i diritti del suo vero proprietario (che ha creato questa funzione), si dice che sia la proprietà Definitore della sicurezza della funzione.
Chi può usarlo?
Il più delle volte, la funzione di definizione della sicurezza può essere eseguita con i diritti del suo proprietario i.e., Il proprietario della funzione Security Deferer sarà l'unico a farne uso nella parte di esecuzione. D'altra parte, le normali funzioni integrate o definite dall'utente possono essere eseguite da qualsiasi utente i.e., pubblico, se non sono specificati come definiti di sicurezza. Poiché il database PostgreSQL accetta sempre l'uso di database e tabelle di sistema da parte dei datori di lavoro locali e remoti PostgreSQL, questo utilizzo può influenzare l'esecuzione della funzione Definitore della sicurezza e danneggia anche la sicurezza di un database. Esiste la possibilità che un utente esterno possa avere l'opportunità di gestire o controllare l'intero database PostgreSQL e le sue tabelle, aggiungere dati danneggiati all'interno del database utilizzando gli stessi diritti del proprietario della funzione di sicurezza della sicurezza. In questo modo, quell'utente outsider può eseguire query e codici che non dovrebbe essere. Durante l'utilizzo di questa proprietà all'interno della query PostgreSQL, abbiamo permesso agli utenti di svolgere le funzioni svolte con i diritti dell'utente che l'ha creata e non utilizzerà i diritti dell'utente che lo ha chiamato. Pertanto, dobbiamo essere più cauti di prima, durante l'utilizzo del database dopo l'uso di Security Deferer. Diamo un'occhiata ad alcuni esempi ora.
Esempio 01
Diamo un'occhiata a un semplice esempio per generare una funzione con la proprietà di sicurezza. Cercheremo di rendere la nostra funzione il più sicura possibile, eppure utilizzeremo la funzione Definitore di sicurezza in essa. Quindi, abbiamo iniziato con l'accesso nello strumento GUI PGADMIN POSTGRESQL. Vedere la scheda "Funzioni" all'interno del tuo database specifico. Fare clic con il pulsante destro del mouse su di esso, passare il mouse sull'opzione "crea" e selezionare "funzione".
Verrà aperto lo schermo chiamato Crea-Function. Aggiungi il nome di una funzione come "innocuo", seleziona il suo proprietario e il suo schema. Poiché questa funzione sarà un definitore di sicurezza, verrebbe eseguita solo dai diritti dell'utente "Aqsayasin".
Dalla sezione Definizione, aggiungi il tipo di ritorno, la lingua e aggiungi il tipo di dati dell'argomento da fornire nella funzione.
All'interno dell'area del codice, scrivi un codice semplice. Come puoi vedere, non stiamo usando alcun tavolo qui, quindi sembra essere incolume quando si tratta della sua esecuzione.
Nell'area delle opzioni, attiva "Sicurezza di definizione" per abilitare la proprietà di sicurezza Definir.
All'interno della sezione SQL, otterrai l'intera query per la creazione di una nuova funzione con la proprietà Security Deferer. Il proprietario di questa funzione sarà l'utente "Aqsayasin".
Dopo aver eseguito l'istruzione Seleziona per chiamare la funzione innocua che passa 15 come valore ad essa, abbiamo ottenuto il valore 25 come output. Sebbene sembri tutto sicuro e sano, l'uso di uno schema pubblico consentirà agli attaccanti/utenti esterni di creare nuovi oggetti e avere accesso a questa funzione.
Per ottenere le informazioni relative alla funzione Definitore di sicurezza appena creata "innocua", dobbiamo utilizzare le istruzioni selezionate mostrate di seguito nell'area di query di PGADMIN 4. La colonna "Proname" mostra il nome di una funzione i.e., innocuo, "nspname" mostra il nome di uno schema I.e., pubblico e la colonna "usname" appartiene al proprietario per questa funzione i.e., "Aqsayasin". Questo è il modo in cui otteniamo le informazioni relative alla funzione di definizione della sicurezza.
Esempio 02
La funzione Security Deferer può anche essere utilizzata per creare una procedura da un determinato utente. Creiamo una nuova procedura "SEC_DEF" utilizzando la proprietà Security Deferer al suo interno. Questa procedura viene utilizzata per ottenere valori dalla tabella "ftest" con lo schema "pubblico". Devi sapere che la tabella "ftest" è stata salvata nel database "aqsayasin e il suo proprietario è l'utente" aqsayasin ".
Ora, devi accedere dal terminale di shell PostgreSQL per aggiungere alcuni semplici comandi. Quindi, abbiamo prima effettuato l'accesso dal database "Aqsayasin". Successivamente, abbiamo provato a collegare il database "Aqsayasin" con l'utente "outsider" utilizzando il comando "\ c" insieme al nome del database e all'utente da connettere. L'utente dell'utente "Outsider" è connesso al database "Aqsayasin".
Ora, è il momento di chiamare la procedura "sec_def ()" utilizzando la funzione Call () integrata nella shell del terminale. Lancerà un'eccezione dimostrando che il "pubblico.Ftest "non esiste per i nostri utenti outsider. Questo perché la procedura è stata creata con i diritti dell'utente "aqsayasin" e l'utente "outsider" non ha tali diritti.
Se si desidera evitare i malfunzionamenti da parte degli estranei e degli utenti non attendibili del database PostgreSQL nel tuo sistema, potrebbe essere necessario limitare o vietare i diritti di "scrittura" per quegli utenti per inserire record nel tuo database all'interno del parametro "Search_Path". Utilizzando in questo modo, gli utenti esterni non saranno in grado di generare oggetti malfunzionati per manipolare il sistema di database, i suoi dati e i diritti. È possibile utilizzare lo schema temporaneo "pg_temp" alla fine da cercare per fare una gestione sicura all'interno del "Search_path" nella query.
Conclusione
L'uso della proprietà Definitore della sicurezza nelle funzioni per svolgere un compito speciale è una tecnica piuttosto potente ma anche molto rischiosa. Per consentire ai nostri utenti di comprendere il concetto di Security Deferar, abbiamo cercato di creare una funzione e una procedura con una funzione Definire di sicurezza come proprietà. Abbiamo visto come si verifica un errore quando un utente senza diritti del proprietario "Definitore di sicurezza" cerca di chiamare la funzione o una procedura. Per riassumere, di solito preferiamo non usarlo spesso all'interno del database in quanto potrebbe non essere salvato per il database PostgreSQL.