Guest User

Untitled

a guest
Oct 3rd, 2018
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. CREATE DATABASE practica01
  2.  
  3. GO
  4. USE practica01
  5. CREATE ROLE Administradores
  6. CREATE ROLE Instructores
  7. CREATE ROLE Alumnos
  8. GO
  9.  
  10. CREATE TABLE usuarios (
  11.  
  12. usuarioID SMALLINT IDENTITY PRIMARY KEY,
  13. username VARCHAR(32) NOT NULL,
  14. passw CHAR(64),
  15. foto VARCHAR(32),
  16. estado BIT NOT NULL DEFAULT 1,
  17.  
  18. CONSTRAINT UQ_username UNIQUE(username),
  19. CONSTRAINT CH_usernameLEN_min CHECK (LEN(username)>7),
  20. CONSTRAINT CH_usernameLEN_max CHECK (LEN(username)<33),
  21. CONSTRAINT CH_passwLEN CHECK (LEN(passw) >7) --simepre la longitud es 64, es necesaria?
  22.  
  23.  
  24. )
  25.  
  26.  
  27. CREATE TABLE alumnos(
  28. alumnoID SMALLINT IDENTITY PRIMARY KEY,
  29. usuarioID SMALLINT,
  30. nombre VARCHAR(32) NOT NULL,
  31. apellido VARCHAR(32) NOT NULL,
  32. fechaNacimiento DATE,
  33. telefono1 VARCHAR(16),
  34. telefono2 VARCHAR(16),
  35. direccion VARCHAR(64),
  36. email VARCHAR(64),
  37. sexo CHAR NOT NULL ,
  38.  
  39. CONSTRAINT FK_alumnos_usuarioID FOREIGN KEY(usuarioID) REFERENCES usuarios(usuarioID),
  40. CONSTRAINT CH_alumnos_sexo CHECK(sexo IN('M','F'))
  41.  
  42. )
  43.  
  44. CREATE TABLE instructores(
  45. instructorID TINYINT IDENTITY PRIMARY KEY,
  46. usuarioID SMALLINT,
  47. nombre VARCHAR(64) NOT NULL,
  48. CUIT VARCHAR(16) NOT NULL,
  49. telefono VARCHAR(16),
  50. montoAcumulado DECIMAL(6,2),
  51.  
  52. CONSTRAINT FK_instructores_usuarioID FOREIGN KEY (usuarioID) REFERENCES usuarios(usuarioID)
  53. )
  54.  
  55. CREATE TABLE administradores(
  56. administradorID TINYINT IDENTITY PRIMARY KEY,
  57. usuarioID SMALLINT,
  58. nombre VARCHAR(64) NOT NULL,
  59. email VARCHAR(64),
  60.  
  61. CONSTRAINT FK_administradores_usuarioID FOREIGN KEY (usuarioID) REFERENCES usuarios(usuarioID)
  62.  
  63. )
  64.  
  65. GO
  66.  
  67. CREATE PROCEDURE sp_administradores_insert
  68. @username VARCHAR(32),
  69. @passw VARCHAR(64),
  70. @foto VARCHAR(32),
  71. @nombre VARCHAR(64),
  72. @email VARCHAR(64)
  73. AS
  74. DECLARE @userID SMALLINT, @msg VARCHAR(256)
  75.  
  76. BEGIN TRY
  77. IF LEN(@passw)>=8
  78. BEGIN
  79. BEGIN TRANSACTION
  80. SET @passw= HASHBYTES('SHA2_256',@passw)
  81. INSERT INTO usuarios (username, passw,foto) VALUES (@username,@passw,@foto)
  82. SET @userID= @@IDENTITY
  83. INSERT INTO administradores (usuarioID, nombre,email) VALUES (@userID, @nombre,@email )
  84.  
  85.  
  86. COMMIT TRANSACTION
  87. END
  88. ELSE
  89. BEGIN
  90.  
  91. SET @msg= 'La longitud del password debe superar los 7 caracteres' ;
  92. THROW 60007, @msg , 16
  93. END
  94. END TRY
  95. BEGIN CATCH
  96. SET @msg= ERROR_MESSAGE() ;
  97. THROW 60008, @msg , 16
  98. ROLLBACK TRANSACTION
  99. END CATCH
  100.  
  101.  
  102. GO
  103.  
  104. CREATE TRIGGER createLoginForUser ON usuarios AFTER INSERT
  105. AS
  106. DECLARE @username VARCHAR(32), @passw VARCHAR(64)
  107. DECLARE @SQLString NVARCHAR(500), @ParmDefinition NVARCHAR(500);
  108. --SENTENCIA DINAMICA
  109. --Definicion sentencia
  110. SET @SQLString =N' CREATE LOGIN ['+@username+'] WITH PASSWORD= '+ @passw+ ' HASHED MUST_CHANGE ,CHECK_EXPIRATION = ON ,CHECK_POLICY ON , DEFAULT_DATABASE=[practica01];
  111. CREATE USER ['+@username+'] FOR LOGIN ['+@username+'];
  112. ALTER ROLE administradores ADD MEMBER ['+@username+'];';
  113. --Definicion parametros
  114. SET @ParmDefinition = N'@username VARCHAR(32), @passw VARCHAR(64)';
  115. -- seteo de parametros
  116. SELECT @username =username, @passw=passw FROM inserted
  117. -- Ejecucion de sentencia
  118.  
  119. EXECUTE SP_EXECUTESQL @SQLString, @ParmDefinition,
  120. @username, @passw;
  121.  
  122.  
  123. --no siempre asignare el usuario a administradores, es para poder probar
  124.  
  125. GO
Add Comment
Please, Sign In to add comment