Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error al Crear Procedimiento Almacenado para Inicio de Sesion

Estas en el tema de Error al Crear Procedimiento Almacenado para Inicio de Sesion en el foro de SQL Server en Foros del Web. Hola a Todos Tengo una consulta tengo un procedimiento para crear un inicio de session en sql server 2005 el problema radica q no me ...
  #1 (permalink)  
Antiguo 02/03/2009, 14:27
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Error al Crear Procedimiento Almacenado para Inicio de Sesion

Hola a Todos Tengo una consulta tengo un procedimiento para crear un inicio de session en sql server 2005 el problema radica q no me crear el procedimiento almacenado para crear inicio de sesion

aqui esta el codigo
Código PHP:
CREATE PROCEDURE Sp_CrearLogin
(
    @
USUARIO    VARCHAR(100),
    @
CLAVE        VARCHAR(100),
    @
BD            VARCHAR(100),
    @
EXPIRE        BIT
)
AS
    
BEGIN TRY
        
CREATE LOGIN @USUARIO WITH 
        PASSWORD 
= @CLAVE,
        
DEFAULT_DATABASE=@BD
        
DEFAULT_LANGUAGE=[Español], 
        
CHECK_EXPIRATION=@EXPIRE
        
CHECK_POLICY=ON;
    
END TRY
    
BEGIN CATCH
        PRINT 
'NUMERO DE ERROR: ' ERROR_NUMBER();
        PRINT 
'MENSAJE DE ERROR: ' +ERROR_MESSAGE();
    
END CATCH;
GO 
y me genera el siguiente error
Mens 102, Nivel 15, Estado 1, Procedimiento Sp_CrearLogin, Línea 10
Incorrect syntax near '@USUARIO'.
Mens 319, Nivel 15, Estado 1, Procedimiento Sp_CrearLogin, Línea 10
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.

supongo q esta mal la variable @USUARIO ya q es de tipo varchar y al crear no me reconoce he probado en ponerlo entre parentesis pero me generar error en clave alguna ayuda para resolverlo o tienen un codigo para poder crearlo
  #2 (permalink)  
Antiguo 02/03/2009, 22:11
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Error al Crear Procedimiento Almacenado para Inicio de Sesion

Dradi7

¿En que momento se ejecuta el CREATE LOGIN?

Creo que lo que usted necesita es hacer un query dinamico, algo mas o menos asi:


CREATE PROCEDURE Sp_CrearLogin
(
@USUARIO VARCHAR(100),
@CLAVE VARCHAR(100),
@BD VARCHAR(100),
@EXPIRE BIT,
@SQLString NVARCHAR(1000)
)
AS
BEGIN TRY
SET @SQLString =N'
CREATE LOGIN '+ @USUARIO+' WITH
PASSWORD = '+@CLAVE +',
DEFAULT_DATABASE='+@BD +',
DEFAULT_LANGUAGE=[Español],
CHECK_EXPIRATION='+@EXPIRE'+,
CHECK_POLICY=ON';
END TRY
EXECUTE sp_executesql @SQLString
BEGIN CATCH
PRINT 'NUMERO DE ERROR: ' + ERROR_NUMBER();
PRINT 'MENSAJE DE ERROR: ' +ERROR_MESSAGE();
END CATCH;
GO
  #3 (permalink)  
Antiguo 03/03/2009, 07:40
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Error al Crear Procedimiento Almacenado para Inicio de Sesion

Tu codigo esta bien pero me genera error en la clave dice q no puedo convertir un varchar a int
  #4 (permalink)  
Antiguo 03/03/2009, 07:43
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Error al Crear Procedimiento Almacenado para Inicio de Sesion

sabes una forma de q lo envie la clave como '123' ya q al hacerlo de la manera q tu me dices me lo envia como 123 y por eso me genera el error
  #5 (permalink)  
Antiguo 03/03/2009, 17:08
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Error al Crear Procedimiento Almacenado para Inicio de Sesion

agrega la conversion del BIT a un char(1)

CHECK_EXPIRATION='+ cast(@EXPIRE as char(1)) +',
  #6 (permalink)  
Antiguo 04/03/2009, 08:25
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Error al Crear Procedimiento Almacenado para Inicio de Sesion

bueno ya lo tengo solucionado esa parte ahora mi dudad es la siguiente yo al crear el usuario de esta manera puedo asignarle una base de datos por defecto q el solo puede utilizar es decir solo puede abrir esa base de datos y no las demas
como haria o q codigo mas le agregaria para q pude abrir y leer todas las BD q existen en mi SQL Server
  #7 (permalink)  
Antiguo 04/03/2009, 08:52
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Error al Crear Procedimiento Almacenado para Inicio de Sesion

Por Fin lo Resolvi y lo Mejore en Parte aqui Les Dejo el Codigo Cambiado y Mejorado

Código PHP:
CREATE PROCEDURE Sp_CrearLogin
(
    @
USUARIO            VARCHAR(100),
    @
CLAVE        VARCHAR(100),
    @
BD            VARCHAR(100),
    @
EXPIRE        VARCHAR(100),
    @
CONTROL            INT
)
AS
BEGIN TRY
    DECLARE @
SQLString NVARCHAR(MAX)
    
SET @SQLString N'
        CREATE LOGIN ['
+ @USUARIO+'] WITH
        PASSWORD = ''' 
+ @CLAVE ''',
        DEFAULT_DATABASE=['
+@BD +'],
        DEFAULT_LANGUAGE=[Español],
        CHECK_EXPIRATION='
+@EXPIRE+',
        CHECK_POLICY=ON'
;
    PRINT @
SQLString
    EXECUTE SP_EXECUTESQL 
@SQLString
    
IF @CONTROL 1  /* Aqui le Dijo q si es 1 puede manejar cualquier Base de Datos*/
        
EXECUTE MASTER..SP_addsrvrolemember @USUARIO, @rolename N'sysadmin'
END TRY
BEGIN CATCH
    PRINT 
'NUMERO DE ERROR: ' CONVERT(VARCHAR,ERROR_NUMBER());
    PRINT 
'MENSAJE DE ERROR: ' ERROR_MESSAGE();
END CATCH;
GO

/* Aqui envio a Ejecutar mi Proc Almacenado de Crear Login */
EXEC Sp_CrearLogin 'Diego','123','MASTER','OFF',
Ojala q a Todos les Sirvan en Caso Tengan el Mismo Problema q yo Tuve
  #8 (permalink)  
Antiguo 04/03/2009, 22:30
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Error al Crear Procedimiento Almacenado para Inicio de Sesion

Cuidado, cuidado !!!, el rol SYSADMIN, es un SUPER ROL, esto es, puede hacer TODO en TODAS tus bases, es similar al SA.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:54.