none
T-SQL Creacion de Usuarios RRS feed

  • Pregunta

  • Buenas a todos. 

    Actualmente estoy intentando realizar una pequeña aplicacion en VS .Net 2005 para reforzar lo aprendido hasta ahoara con el DCE 2005.

    Pero estoy teniendo problemas. 

    Cree una SP (SQL Server Express 2005, pero tambien podria usar SQL Server 2000) que crea usuarios en la base de datos para otorgar permisos, la idea es muy sensilla, la aplicacion utiliza autenticacion Windows para ingresar al motor de bases de datos y debe de crear los usuario con este mismo esquema de seguridad (Autenticacion Windows), y ademas ingresar los datos del usuario en uan tabla, pero cuando ejecuto el SP me da este error, el insert a la tabla es lo unico que realiza correctamente.

     

    ******************************************************************************

    Este es el mensaje de error que lanza.  Mens 15407, Nivel 16, Estado 1, Procedimiento I_usuario, Línea 18

    '@usuario' no es un nombre válido en Windows NT válido. Asigne el nombre completo: <dominio\nombreUsuario>.

    Mens 15007, Nivel 16, Estado 1, Procedimiento I_usuario, Línea 20

    '@usuario' no es un inicio de sesión válido o el usuario no tiene pe

    *****************************************************************************

    -------------------------------------------------------------------------------------------------

    Este es el SP. Se le estan pasando valores validos para el dominio donde se esta ejecutando el Motor. 

    Ej: 

          @usuario = 'MiDomino\MiUsuario'

          @nombre = 'Pepito Perez Pereira'

    ALTER PROCEDURE [dbo].[I_usuario]

    @usuario nchar(20),

    @nombre varchar(50)

    AS

    BEGIN

    SET NOCOUNT ON;

    --SE COMPRUEVA QUE EL USUARIO NO EXISTE EN LA BASE DE DATOS.

    IF NOT EXISTS (SELECT usuario FROM dbo.usuario WHERE usuario = @usuario)

    BEGIN

    --Si no existe

    --Se crea el Login en la instancia para que pueda iniciar sesion

    CREATE LOGIN [@usuario] FROM WINDOWS WITH DEFAULT_DATABASE=[MiDB], DEFAULT_LANGUAGE=[Español]

    --Se crea el usuario en la base de datos

    CREATE USER [@usuario] FOR LOGIN [@usuario] WITH DEFAULT_SCHEMA=[dbo]

    INSERT INTO dbo.usuario (usuario, nombre)

    VALUES (@usuario, @nombre)

    END

    END

    -------------------------------------------------------------------------------------------------

    Espero y me puedan ayudar.  Saludos.

    lunes, 23 de octubre de 2006 19:09

Todas las respuestas

  • Hola José Pablo, me parece que el tema va porque CREATE LOGIN (hasta donde yo sé) no acepta parametros (me parece que CREATE USER tampoco), asi es que de hacerlo debieses hacerlo con sql dinámico (tomando en cuenta la seguridad obviamente).

    Así por ejemplo la línea:

    CREATE LOGIN [@usuario] FROM WINDOWS WITH DEFAULT_DATABASE=[MiDB], DEFAULT_LANGUAGE=[Español]

    quedaría algo como:

    DECLARE @CreateLoginStatement nvarchar(200)

    SET @CreateLoginStatement = 'CREATE LOGIN [' + QUOTENAME(@usuario) + '] WITH DEFAULT_DATABASE = Prueba FROM WINDOWS '

    EXEC sp_executesql @CreateLoginStatement

    Espero que te sirva esta pequeña idea para seguir delante, saludos y happy programation!

    miércoles, 25 de octubre de 2006 0:07
  • Gracias Mauricio, voy a intentar con su consejo.  No sabia ese detalle de los parametros.

     

    De nuevo gracias, por compartir tu conocimiento.

    martes, 31 de octubre de 2006 16:50
  • Nada que agradecer estimado, "compartir lo que sabes, aprender lo que no sabes" es nuestro lema

             Saludos y exitos!

    martes, 31 de octubre de 2006 20:18