Definidor de segurança do Postgres

Definidor de segurança do Postgres
Nesta era avançada e automatizada de computadores e tecnologia, todo mundo quer ser garantido junto com suas informações pessoais. Mesmo assim, os bancos de dados são usados ​​para armazenar informações sobre muitas coisas, incluindo informações pessoais sobre pessoas. Devido a muitas informações, também precisamos cuidar de nossa segurança do banco de dados para não permitir que ninguém use -o erroneamente. No banco de dados PostGresql, precisamos usar muitos bancos de dados internos para buscar alguns registros das tabelas e bancos de dados. Assim como muitas dessas funções, uma é a função do definidor de segurança. Como o título sugere que deve ser algo relacionado à definição da segurança do banco de dados PostGresql. Como esse conceito é único, complexo e novo na maioria dos usuários do PostgreSQL, decidimos cobri -lo em um novo artigo. Então, vamos ter um pouco de conhecimento sobre a propriedade do Definador de Segurança dos Métodos agora.

Definador de segurança vs Security Invocador

O termo definidor de segurança se referiu a algumas funções excepcionais usadas para executar tarefas exclusivas e privilegiadas relativas à segurança do banco de dados no PostGresql. Essas tarefas são tão oficiais e privilegiadas que nem todo usuário pode executá -las ou usá -las se for seguro e som. Isso pode ser usado como uma propriedade na consulta PostGresql enquanto realiza algumas transações do banco de dados PostgreSQL. Quando uma função é chamada com os privilégios do usuário que está chamando essa função, diz -se que é a propriedade do invocador de segurança das funções. Por outro lado, quando uma função é chamada com os direitos de seu verdadeiro proprietário (que criou essa função), diz -se que é a propriedade definidora de segurança da função.

Quem pode usar isso?

Na maioria das vezes, a função do definidor de segurança pode ser executada com os direitos de seu proprietário i.e., O proprietário da função do definidor de segurança será o único a usar na parte de execução. Por outro lado, funções normais incorporadas ou definidas pelo usuário podem ser executadas por qualquer usuário i.e., público, se eles não forem especificados como definidores de segurança. Como o banco de dados PostGresql sempre concorda com o uso de bancos de dados e tabelas do sistema pelos empregadores locais e remotos do PostGresql, esse uso pode influenciar a execução da função de definição de segurança e também prejudica a segurança de um banco de dados. Existe a possibilidade de um usuário externo ter a oportunidade de gerenciar ou controlar todo o banco de dados PostGresql e suas tabelas, adicionar dados corrompidos no banco de dados usando os mesmos direitos que o proprietário da função de segurança. Dessa forma, esse usuário de fora pode executar consultas e códigos que ele/ela não deveria ser. Ao usar essa propriedade na consulta PostGresql, deixamos os usuários executarem as funções realizadas com os direitos do usuário que a criou e não estarão usando os direitos do usuário que o chama. Assim, precisamos ser mais cautelosos do que antes, enquanto usamos o banco de dados após o uso do definidor de segurança. Vamos dar uma olhada em alguns exemplos agora.

Exemplo 01

Vamos dar uma olhada em um exemplo simples para gerar uma função com a propriedade definidora de segurança. Vamos tentar tornar nossa função o mais segura possível, mas usar a função do definidor de segurança nele. Então, começamos com o login no banco de dados PostGresql PGadmin GUI Tool. Veja a guia "Funções" em seu banco de dados específico. Clique com o botão direito do mouse, mouse sobre a opção "Criar" e selecione "função".

A tela chamada Create-Function será aberta. Adicione o nome de uma função como "inofensiva", selecione seu proprietário e esquema. Como essa função será um definidor de segurança, seria executada apenas pelos direitos do usuário "aqsayasin".

Na seção de definição, adicione o tipo de retorno, linguagem e adicione o tipo de dados do argumento a ser dado na função.

Dentro da área de código, escreva algum código simples. Como você pode ver, não estamos usando nenhuma tabela aqui, por isso parece ilegal quando se trata de sua execução.

Na área de opções, ligue o “Segurança do Definidor” para ativar a propriedade do Definador de Segurança.

Dentro da seção SQL, você terá toda a sua consulta para criar uma nova função com a propriedade do Definador de Segurança. O proprietário desta função será o usuário "aqsayasin".

Depois de executar a instrução selecionada para chamar a função inofensiva que passa 15 como valor para ela, temos o valor 25 como saída. Embora pareça tudo seguro e som, o uso do esquema público permitirá que os adesores/usuários externos criem novos objetos e tenham acesso a esta função.

Para obter as informações sobre a função de definição de segurança recém -criada "inofensiva", precisamos usar a instrução SELECT mostrada abaixo na área de consulta do pgadmin 4. A coluna "proname" está mostrando o nome de uma função i.e., inofensivo, "NSPName" está mostrando o nome de um esquema i.e., Public, e a coluna “USName” pertence ao proprietário desta função i.e., “Aqsayasin”. É assim que obtemos as informações sobre a função do definidor de segurança.

Exemplo 02

A função definidora de segurança também pode ser usada para criar um procedimento por um determinado usuário. Vamos criar um novo procedimento "Sec_def" usando a propriedade Definadora de segurança dentro dela. Este procedimento é usado para obter valores da tabela "ftest" com o esquema "público". Você precisa saber que a tabela "ftest" foi salva no banco de dados "Aqsayasin" e seu proprietário é o usuário "aqsayasin".

Agora, você precisa fazer login no terminal shell do PostGresql para adicionar alguns comandos simples. Então, fizemos login no banco de dados "Aqsayasin" primeiro. Depois disso, tentamos conectar o banco de dados "Aqsayasin" com o usuário "Outsider" usando o comando "\ c" junto com o nome e o usuário do banco de dados para estar conectado. O usuário "Outsider" Usuário está conectado ao banco de dados "aqsayasin".

Agora, é hora de chamar o procedimento "Sec_Def ()" usando a função de chamada interna () no shell do terminal. Ele lançará uma exceção mostrando que o “público.Ftest ”não existe para nosso estranho do usuário. Isso ocorre porque o procedimento foi criado com os direitos do usuário "aqsayasin", e o usuário "estranho" não tem esses direitos.

Se você deseja evitar os mau funcionamento dos pessoas de fora e usuários não confiáveis ​​do banco de dados PostgreSQL em seu sistema, talvez seja necessário restringir ou proibir os direitos de "escrita" para que esses usuários insira registros no seu banco de dados no parâmetro "Search_Path". Usando dessa maneira, os usuários externos não poderão gerar objetos com defeito para manipular seu sistema de banco de dados, seus dados e direitos. Você pode usar o esquema temporário "PG_TEMP" no último a ser pesquisado para fazer gerenciamento seguro dentro do "Search_path" na consulta.

Conclusão

O uso da propriedade definidora de segurança nas funções para realizar alguma tarefa especial é uma técnica bastante potente, mas muito arriscada também. Para permitir que nossos usuários entendam o conceito de definidor de segurança, tentamos criar uma função e um procedimento com uma função definidora de segurança como uma propriedade. Vimos como ocorre um erro quando um usuário sem os direitos do proprietário do "Definidor de Segurança" tenta chamar a função ou um procedimento. Para resumir, geralmente preferimos não usá -lo frequentemente dentro do banco de dados, pois pode não ser salvo para o banco de dados PostGresql.