Postgres Security Definer

Postgres Security Definer
Dans cette ère avancée et automatisée d'ordinateurs et de technologies, tout le monde veut être sécurisé avec ses informations personnelles. Idem comme ça, les bases de données sont utilisées pour stocker des informations concernant beaucoup de choses, y compris des informations personnelles sur les personnes. En raison de beaucoup d'informations, nous devons également prendre soin de la sécurité de notre base de données pour ne pas laisser à personne l'utiliser à tort. Dans la base de données PostgreSQL, nous devons utiliser de nombreuses bases de données intégrées pour récupérer certains enregistrements à partir des tables et de la base de données. Tout comme beaucoup de ces fonctions, l'une est la fonction de sécurité de sécurité. Comme le titre l'indique, il doit être quelque chose de lié à la définition de la sécurité de la base de données PostgreSQL. Comme ce concept est unique, complexe et nouveau pour la plupart des utilisateurs de Postgresql, nous avons décidé de le couvrir dans un tout nouvel article. Alors, ayons un peu de connaissances sur la propriété de sécurité des méthodes de sécurité.

Sécurité Defier vs Invocer de sécurité

Le terme de sécurité de sécurité a fait référence à certaines fonctions exceptionnelles utilisées pour effectuer des tâches uniques et privilégiées concernant la sécurité de la base de données dans PostgreSQL. Ces tâches sont si officielles et privilégiées que tous les utilisateurs ne peuvent pas les exécuter ou les utiliser s'il est sûr et solide. Cela peut être utilisé comme propriété dans la requête PostgreSQL tout en effectuant certaines transactions à partir de la base de données PostgreSQL. Lorsqu'une fonction a été appelée avec les privilèges de l'utilisateur qui a appelé cette fonction, il est dit que ce soit la propriété de sécurité des fonctions. D'un autre côté, lorsqu'une fonction a été appelée avec les droits de son véritable propriétaire (qui a créé cette fonction), il est dit que ce serait la propriété de sécurité de la fonction de la fonction.

Qui peut l'utiliser?

La plupart du temps, la fonction de définition de sécurité peut être exécutée avec les droits de son propriétaire i.e., Le propriétaire de la fonction de sécurité de sécurité sera le seul à en utiliser sur la partie d'exécution. D'un autre côté, les fonctions normales intégrées ou définies par l'utilisateur peuvent être exécutées par n'importe quel utilisateur I.e., public, s'ils ne sont pas spécifiés en tant que définisseurs de sécurité. Comme la base de données PostgreSQL accepte toujours l'utilisation de bases de données et de tables système par les employeurs PostgreSQL locaux et distants, cette utilisation peut influencer l'exécution de la fonction de sécurité de sécurité et nuit également à la sécurité d'une base de données. Il est possible qu'un utilisateur extérieur puisse avoir l'occasion de gérer ou de contrôler toute la base de données PostgreSQL et ses tableaux, ajouter des données corrompues dans la base de données en utilisant les mêmes droits que le propriétaire de la fonction de sécurité de sécurité. De cette façon, cet utilisateur Outsider peut exécuter des requêtes et des codes qu'il ne devrait pas être. Lors de l'utilisation de cette propriété dans la requête PostgreSQL, nous avons permis aux utilisateurs d'effectuer les fonctions remplies avec les droits de l'utilisateur qui l'a créé et n'utilisera pas les droits de l'utilisateur qui l'a appelé. Ainsi, nous devons être plus prudents qu'auparavant, tout en utilisant la base de données après l'utilisation de la sécurité définie. Jetons un coup d'œil à quelques exemples maintenant.

Exemple 01

Jetons un coup d'œil à un exemple simple pour générer une fonction avec la propriété de sécurité. Nous essaierons de rendre notre fonction aussi sécurisée que possible tout en utilisant la fonction de sécurité de sécurité. Nous avons donc commencé avec la connexion dans l'outil de GUI de la base de données PostgreSQL PGADMIN. Voir l'onglet «Functions» dans votre base de données spécifique. Cliquez avec le bouton droit dessus, survolez l'option «Créer» et sélectionnez «Fonction».

L'écran nommé création de création sera ouvert. Ajoutez le nom d'une fonction comme «inoffensive», sélectionnez son propriétaire et son schéma. Comme cette fonction va être un définitif de sécurité, il ne serait exécuté que par les droits de l'utilisateur «aqsayasin».

Dans la section de définition, ajoutez le type de retour, la langue et ajoutez le type de données de l'argument à donner dans la fonction.

Dans la zone de code, écrivez un code simple. Comme vous pouvez le voir, nous n'utilisons aucun tableau ici, donc il semble être sans liaison en ce qui concerne son exécution.

Dans le domaine des options, activez la «sécurité de définir» pour permettre la propriété de sécurité définie.

Dans la section SQL, vous obtiendrez toute votre requête pour créer une nouvelle fonction avec la propriété de sécurité. Le propriétaire de cette fonction sera l'utilisateur «aqsayasin».

Après avoir exécuté l'instruction de sélection pour appeler la fonction inoffensive passant 15 en valeur, nous avons la valeur 25 en sortie. Bien qu'il ait l'air sain.

Pour obtenir les informations concernant la fonction de sécurité de sécurité nouvellement créée «inoffensive», nous devons utiliser les instructions de sélection ci-dessous dans la zone de requête de Pgadmin 4. La colonne «proname» affiche le nom d'une fonction i.e., inoffensif, «nspname» montre le nom d'un schéma i.e., public, et la colonne «USName» appartient au propriétaire pour cette fonction i.e., "Aqsayasin". C'est ainsi que nous obtenons les informations concernant la fonction de définition de sécurité.

Exemple 02

La fonction de sécurité de sécurité peut également être utilisée pour créer une procédure par un utilisateur particulier. Créons une nouvelle procédure «sec_def» en utilisant la propriété de sécurité. Cette procédure est utilisée pour obtenir des valeurs du tableau «ftest» avec le schéma «public». Vous devez savoir que la table «Ftest» a été enregistrée dans la base de données «Aqsayasin» et que son propriétaire est l'utilisateur «Aqsayasin».

Maintenant, vous devez vous connecter à partir de la borne Shell PostgreSQL pour ajouter quelques commandes simples. Donc, nous nous sommes d'abord connectés à la base de données «aqsayasin». Après cela, nous avons essayé de connecter la base de données "Aqsayasin" avec l'utilisateur "Outsider" en utilisant la commande "\ c" avec le nom de la base de données et l'utilisateur à connecter. L'utilisateur «Outsider» de l'utilisateur est connecté à la base de données «Aqsayasin».

Maintenant, il est temps d'appeler la procédure «sec_def ()» en utilisant la fonction Call () intégrée dans le shell terminal. Il mettra une exception montrant que le «public.Ftest "n'existe pas pour notre utilisateur étranger. En effet.

Si vous souhaitez éviter les dysfonctionnements par les étrangers et les utilisateurs non fiables de la base de données PostgreSQL dans votre système, vous devrez peut-être restreindre ou interdire les droits de «rédaction» pour que les utilisateurs insérent des enregistrements dans votre base de données dans le paramètre «Search_Path». En utilisant de cette façon, les utilisateurs extérieurs ne pourront pas générer des objets défectueux pour manipuler votre système de base de données, ses données et ses droits. Vous pouvez utiliser le schéma temporaire «pg_temp» au dernier pour être recherché pour effectuer une gestion sécurisée dans le «search_path» dans la requête.

Conclusion

L'utilisation de la propriété de sécurité de sécurité dans les fonctions pour faire une tâche spéciale est une technique assez puissante mais très risquée également. Pour permettre à nos utilisateurs de comprendre le concept de sécurité de sécurité, nous avons essayé de créer une fonction et une procédure ayant une fonction de définition de sécurité en tant que propriété. Nous avons vu comment une erreur se produit lorsqu'un utilisateur sans droits du propriétaire «de sécurité de sécurité» essaie d'appeler la fonction ou une procédure. Pour résumer, nous préférons généralement ne pas l'utiliser souvent dans la base de données car elle peut être non sauvée pour la base de données PostgreSQL.