Maison >base de données >tutoriel mysql >Comment puis-je créer en toute sécurité des connexions SQL à l'aide de paramètres dans des procédures stockées ?

Comment puis-je créer en toute sécurité des connexions SQL à l'aide de paramètres dans des procédures stockées ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 10:36:20162parcourir

How Can I Securely Create SQL Logins Using Parameters in Stored Procedures?

Création d'une connexion SQL avec des paramètres dans des procédures stockées

Dans le but d'automatiser la création de locataires dans une base de données SaaS, un développeur a tenté d'utiliser un procédure stockée avec des entrées paramétrées pour le nom d'utilisateur et le mot de passe dans l'instruction CREATE LOGIN. Cependant, ils ont rencontré des messages d'erreur énigmatiques liés à une syntaxe incorrecte.

La cause première du problème réside dans la syntaxe CREATE LOGIN, qui nécessite des valeurs littérales plutôt que des paramètres. Pour résoudre ce problème, il existe une solution de contournement :

  1. Enveloppez la commande CREATE LOGIN dans une instruction EXEC.
  2. Construisez la commande CREATE LOGIN de manière dynamique en tant que variable de chaîne.
  3. Tirez parti de QUOTENAME() pour vous protéger contre les attaques potentielles par injection SQL.

Voici une version révisée de la procédure stockée qui intègre ces modifications :

CREATE PROCEDURE [MyScheme].[Tenants_InsertTenant]
    @username nvarchar(2048),
    @password nvarchar(2048)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @sql nvarchar(max) = 'CREATE LOGIN ' + QUOTENAME(@username) + ' WITH PASSWORD = ' + QUOTENAME(@password, '''');
    EXEC(@sql)
END

En implémentant cette solution de contournement, la procédure stockée peut désormais créer dynamiquement des connexions SQL basées sur les paramètres fournis, permettant au processus de création de locataire de devenir entièrement automatisé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn