0 calificaciones0% encontró este documento útil (0 votos)
17 vistas
SQL Server2016
Este documento describe los pasos para administrar usuarios y roles en una base de datos de SQL Server. Incluye instrucciones para crear roles y usuarios, asignar permisos a objetos como tablas y bases de datos, y realizar copias de seguridad de la base de datos. También muestra ejemplos de consultas SQL, procedimientos almacenados y la conversión de datos entre formatos XML y JSON.
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0 calificaciones0% encontró este documento útil (0 votos)
17 vistas
SQL Server2016
Este documento describe los pasos para administrar usuarios y roles en una base de datos de SQL Server. Incluye instrucciones para crear roles y usuarios, asignar permisos a objetos como tablas y bases de datos, y realizar copias de seguridad de la base de datos. También muestra ejemplos de consultas SQL, procedimientos almacenados y la conversión de datos entre formatos XML y JSON.
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7
SQL Server 2016 -Administración de usuarios de base de datos.
Servidor - Base de datos - Base de datos del
--Creacion de rol. sistema - Master - USE MASTER; Seguridad - Usuarios CREATE SERVER ROLE miprimerrol AUTHORIZATION Por defecto: sysadmin; ##MS_AgentSigningCertificate## GO ##MS_PolicyEventProcessingLogin## dbo --Ver roles. guest Servidor - Seguridad - Roles del servidor INFORMATION_SCHEMA Por defecto: sys (sysadmin) tiene todos los permisos, solo Usuarios - Nuevo usuario debemos tener 1. GENERAL (bulkadmin /dbcreator / diskadmin / processadmin Escribir nombre de usuario (TestUser) - Nombre / public / de inicio de sesion... - securityadmin / serveradmin / setupadmin) Seleccionar nombre de usuario (Test) - Esquema predeterminado... - --Administracion de roles de base de datos Seleccionar esquema (agrupan usuarios). ESQUEMAS DE PROPIEDAD (no seleccionar) Base de datos - Base de datos del sistema - PERTENENCIA (roles) = quien lee / escribe / Master - Seguridad - administra / respalda Roles - Roles de base de datos db_datareader Por defecto: ELEMENTOS PROTEGIBLES (db_accessadmin / db_backupoperator / Seleccionar objetos como tablas db_datareader / db_datawriter / Otorgar permisos a objetos seleccionados db_ddladmin / db_denydatareader / (MSreplication_options) db_denydatawriter / db_owner / ALTER / CONTROL / INSERT db_securityadmin / public) Roles - Nuevo rol de base datos GENERAL --Creacion de un respaldo de base datos. Escribir nombre de rol - Seleccionar esquemas Servidor - Base de datos - Click derecho - propiedad de este rol Tareas - Copia de seguridad (db_datawriter) GENERAL Seleccionar usuario a asignar al rol (Tipo de respaldo = Full / Differential) (Seleccionar directorio - Escribir nombre) -Inicios de sesion. OPCIONES DE MEDIOS = Anexar / Sobrescribir Servidor - Seguridad - Inicios de sesion copias. Por defecto: OPCIONES DE COPIA DE SEGURIDAD = expiracion por DESKTOP-8LC8B17 / NT Authorithy\System / NT dia / fecha Service\MSSQL$SQLEXPRESS / Cifrado = Se debe seleccionar la opcion "hacer NT Service\SQLWriter / NT Service\Winmgmt / sa copia de seguridad GENERAL en un nuevo conjunto de medios y borrar todos Nuevo inicio de sesion los conjuntos de Nombre de inicio de sesion copia de seguridad existentes". Autenticacion= Windows / SQL Server Para aumentar nivel de seguridad de contraseña --Implementar permisos en el servidor. debemos seleccionar Servidor - Seguridad - Inicios de sesion (Test) "exigir directivas / expiracion de contraseña" ELEMENTOS PROTEGIBLES Escoger base datos / idioma predeterminado Seleccionar objetos como servidores ROLES DEL SERVIDOR = Escoger roles para conceder Otorgar permisos a objetos seleccionados privilegios de GRANT = habilita permiso seguridad en todo el servidor a un usuario. WITH GRANT = permite que el usuario pueda ASIGNACION DE USUARIOS aplicarlo a otro usuario Seleccionar la base de datos y el usuario asignado al inicio de sesion. --Implementar permisos en la base datos. Colocar el tipo de rol o pertenencia Servidor - Base de datos - Base de datos del (db_datareader / db_datawriter) sistema - Master - Lectura / Escritura Seguridad - Usuarios - Seleccionar usuario ELEMENTOS PROTEGIBLES (TestUser) Seleccionar objetos como servidores ELEMENTOS PROTEGIBLES (ver permisos) Otorgar permisos a objetos seleccionados Seleccionar objetos como bases de datos ESTADO = Permite aceptar / denegar, habilitar / Otorgar permisos a objetos seleccionados deshabilitar CONNECT / CONTROL configuraciones realizadas. --Activadores de inicio de sesion. --Procedimientos almacenados. Servidor - Base de datos - Base de datos del CREATE PROCEDURE espacios_max sistema - Master - AS Tablas - Tablas del sistema - Desencadenadores SELECT Placa, IdColor (evento que sucede FROM dbo.Vehiculos en una tabla, general notificaciones) WHERE Espacios > 5;
--Mover base de datos. --Procedimientos almacenados parametrizados.
Servidor - Base de datos - Instantaneas de bases CREATE PROCEDURE vehiculos_colores_espacios de datos - Demo02 @colorA INT, - Click derecho - Tareas - Poner sin conexion @colorB INT (no permite edicion AS de base) + Separar IF(@colorA IS NOT NULL) AND (@colorB IS NOT NULL) - Servidor - Base de datos - Click derecho - SELECT Placa, IdColor Adjuntar - Seleccionar FROM dbo.Vehiculos base de datos WHERE Espacios > 5 AND (IdColor = @colorA OR IdColor = --Crear tabla Vehiculos. @colorB) CREATE TABLE dbo.Vehiculos( ELSE placa VARCHAR(50) NOT NULL, SELECT 'Sin colores' espacios INT NOT NULL, color INT NOT NULL, descripcion VARCHAR(50) ); --Consulta. SELECT IdUsuario, Nombres, Apellidos --Insertar usuarios. FROM dbo.Usuarios; INSERT INTO dbo.Usuarios (Nombres, Apellidos) --Consulta en XML. VALUES SELECT IdUsuario, Nombres, Apellidos ('Belen', 'Morales'), FROM dbo.Usuarios ('Juan', 'Nieto'), FOR XML AUTO; ('Juan', 'Morales'); / FOR XML RAW; / FOR XML PATH; --Filtrar datos. SELECT * FROM dbo.Usuarios; <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE Edit_Mensaje SYSTEM"Edit_Mensaje.dtd"> SELECT IdUsuario, Apellidos FROM dbo.Usuarios WHERE IdUsuario = 5; <Edit_Mensaje> <Mensaje> SELECT IdUsuario, Apellidos FROM dbo.Usuarios <Remitente> WHERE Nombres = 'Juan'; <Nombre>Nombre del remitente</Nombre> <Mail>Correo del remitente </Mail> SELECT IdUsuario, Apellidos FROM dbo.Usuarios </Remitente> WHERE Apellidos = 'Morales' ORDER BY Nombres; <Destinatario> <Nombre>Nombre del destinatario</Nombre> --Actualizar usuarios. <Mail>Correo del destinatario</Mail> UPDATE dbo.Usuarios </Destinatario> SET Nombres = 'Belem', <Texto> Apellidos = 'Pantoja' <Asunto> WHERE IdUsuario = 5; Este es mi documento con una estructura muy sencilla no contiene --Eliminar usuarios. atributos ni entidades... DELETE FROM dbo.Usuarios WHERE IdUsuario = 5; </Asunto> <Parrafo> --No se puede eliminar por las relaciones. Este es mi documento con una DELETE FROM dbo.Colores WHERE IdColor = 2; estructura muy sencilla no contiene atributos ni entidades... </Parrafo> </Texto> </Mensaje> </Edit_Mensaje> DECLARE @rawXML VARCHAR(1000); SELECT * FROM dbo.xmlText; DECLARE @XMLinMemory INT; --Convertir tabla a formato JSON. SET @rawXML = SELECT IdUsuario, Nombres, Apellidos '<Viajes> FROM dbo.Usuarios <IdViaje>1</IdViaje> FOR JSON AUTO; <Nombre>Jose</Nombre> </Viajes>'; --Convertir formato JSON a tabla. DECLARE @json varchar(400) EXEC sp_xml_preparedocument @XMLinMemory OUTPUT, SET @json = @rawXML; N'[ { "Nombre": "Juan", "Apellidos": "Ugalde SELECT * Loza" }, FROM OPENXML (@XMLinMemory,'/Viajes',2) { "Nombre": "Jose", "Apellidos": WITH (IdViaje VARCHAR(50), "Castillo" } Nombre VARCHAR(50)) ]'
EXEC sp_xml_removedocument @XMLinMemory; SELECT * FROM OPENJSON(@json)
VALUES( CREATE TABLE JSONText ( '<Viajes> JsonData nvarchar(2000) <IdViaje>1</IdViaje> ) <Nombre>Jose</Nombre> </Viajes>', --Agregar restriccion. '<Viajes> ALTER TABLE JSONText <IdViaje>1</IdViaje> ADD CONSTRAINT [Check JSON] <Nombre>Jose</Nombre> CHECK (ISJSON (JsonData)>0); </Viajes>', '<Viajes> INSERT INTO JSONText(JsonData) <IdViaje>1</IdViaje> VALUES(N'[ <Nombre>Jose</Nombre> {"Nombre": "Juan", "Apellidos": "Ugalde </Viajes>'); Loza"}, {"Nombre": "Jose", "Apellidos": "Castillo"}, ]'); DECLARE @ClientIsMarried INT = 0 DECLARE @Simple INT = NULL DECLARE @Simple2 INT = NULL IF (@ClientIsMarried = 1) DECLARE @Simple3 INT = 1 BEGIN PRINT 'He is married' IF (@Simple = @Simple2) END BEGIN ELSE PRINT 'The same value' BEGIN END PRINT 'He is single' END IF (@Simple IS NULL) BEGIN --Iterar en un ciclo. PRINT 'It is null' DECLARE @Counter INT = 1 END
WHILE (@Counter < 5) IF (@Simple3 IS NOT NULL)
BEGIN BEGIN PRINT @Counter PRINT 'It is not null' SET @Counter = @Counter + 1 END END --Funciones integradas. SELECT * FROM Client; DECLARE @Counter INT = 1; --CONCAT. SELECT CONCAT (ClientName, ClientLastName) AS SELECT ClientFullName FROM Client; CASE @Counter WHEN 1 THEN 'One' --Agregar espacio. WHEN 2 THEN 'Two' SELECT CONCAT (CONCAT (ClientName, ' '), WHEN 3 THEN 'Three' ClientLastName) AS ClientFullName FROM Client; END AS COUNTER --Pasar de Mayus a Minusc. SELECT LOWER ('UPPER'); DECLARE @Simple INT = NULL DECLARE @Simple2 INT = NULL SELECT LOWER (ClientName) FROM Client; DECLARE @Simple3 INT = 1 ................................................ IF (@Simple = @Simple2) ............................. BEGIN SELECT * FROM Client WHERE LOWER (ClientName) = PRINT 'The same value' 'steven'; END --Funcion no determinista. IF (@Simple IS NULL) SELECT ClientID, RAND () AS random FROM Client; BEGIN --devuelve mismo valor PRINT 'It is null' END SELECT ClientID, RAND (ClientID) AS random FROM Client; --devuelve valor aleatorio IF (@Simple3 IS NOT NULL) BEGIN --Funcion que devuelve la fecha y la hora con PRINT 'It is not null' segundos y centesimas. END SELECT GETDATE ();
--Funcion datos en formato tabla.
SELECT * FROM fn_my_permissions (NULL, 'SERVER'); --devolvió permisos de usuario habilitado.
--Base de datos utilizada.
SELECT DB_NAME(); --Funcion escalar (estructura). SELECT * FROM dbo.GetClientById(1); --formato CREATE FUNCTION function_name tabla. ([{@paramter_name [AS] parameter_data_type [=default]} --Concatenar nombre completo. [,...n] SELECT CONCAT (CONCAT (ClientName, ' '), ] ClientLastName) FROM dbo.GetClientById(1); ) RETURNS return_data_type --Borrar funcion. BEGIN DROP FUNCTION dbo.GetClientById function_body RETURN scalar_expression CREATE FUNCTION function_name END [;] ([{@parameter_name [AS] parameter_data_type [=default]} [,...n] CREATE FUNCTION dbo.GetWeekDay ] (@Date DATETIME) ) RETURNS INT RETURNS @return_variable TABLE AS <table_type_definition> BEGIN AS RETURN DATEPART (weekday, @Date) BEGIN END; function_body GO RETURN END [;] --Devuelve dia de la semana en formato # (1-7) (lunes-domingo). --Reservaciones de los clientes. SELECT dbo.GetWeekDay (GETDATE ()); CREATE FUNCTION dbo.GetClientReservations (@ClientID INT) --CheckIn y CheckOut de clientes. RETURNS @ClientReservation TABLE SELECT *, dbo.GetWeekDay (ReservationDateIn) AS ( dateIn, ClientID INT NOT NULL, dbo.GetWeekDay (ReservationDateOut) AS dateOut ClientName TEXT NOT NULL, FROM Reservation; ReservationDateIn DATETIME NOT NULL, ReservationDateOut DATETIME NOT NULL --Eliminar funcion. ) DROP FUNCTION dbo.GetWeekDay; AS BEGIN INSERT @ClientReservation SELECT a.ClientID, a.ClientName, --Funcion de tabla InLine b.ReservationDateIn, b.ReservationDateOut CREATE FUNCTION function_name FROM Client a ([{@paramter_name [AS] parameter_data_type INNER JOIN Reservation b [=default]} ON a.ClientID = [,...n] b.ReservationClientID ] WHERE ClientID = @ClientID ) RETURN RETURNS table END AS RETURN ( sql expression SELECT * FROM dbo.GetClientReservations(2); ) --Borrar funcion. CREATE FUNCTION dbo.GetClientById DROP FUNCTION dbo.GetClientReservations (@ClientID INT) RETURNS table AS RETURN ( SELECT * FROM Client WHERE ClientID = @ClientID ) CREATE TRIGGER trigger_name --Agrega registro a la tabla Log por ON { subject_table } disponibilidad de habitacion cuando se elimine { FOR | AFTER } una reservacion-- {[INSERT], [ ], [UPDATE], [ ], [DELETE]} CREATE TRIGGER dbo.Reservation_DELETE AS ON dbo.Reservation { AFTER DELETE sql_statement [;] AS [,...n] BEGIN } SET NOCOUNT ON; --Envia informacion a la tabla Log despues de DECLARE @RoomID INT agregar datos en tabla Reservation-- CREATE TRIGGER dbo.Reservation_INSERT SELECT @RoomID = Deleted.ReservationRoomID ON dbo.Reservation FROM DELETED AFTER INSERT AS INSERT INTO dbo.Log BEGIN VALUES ('Automatic Delete Log', 'Room ' + SET NOCOUNT ON; CAST(@RoomID AS VARCHAR) + ' is now available') DECLARE @ClientID INT; END SELECT @ClientID = INSERTED.ReservationClientID FROM INSERTED CREATE PROCEDURE INSERT INTO dbo.Log procedure_name VALUES ('Automatic Insert Log', 'Client ' + [{ @parameter data_type }] CAST(@ClientID AS VARCHAR) + ' was updated') [=default] END [out | output ]] [,...n] AS { DROP TRIGGER dbo.Reservation_INSERT [;] [...n] | } [;]
--Agrega registro a la tabla Log despues de CREATE PROCEDURE dbo.uspGetClients --user
actualizar informacion de clientes en tabla server procedure (usp)-- Room-- AS CREATE TRIGGER dbo.Room_UPDATE SELECT * FROM Client; ON dbo.Room GO AFTER UPDATE AS EXEC dbo.uspGetClients --puede emplearse BEGIN EXECUTE-- SET NOCOUNT ON; DECLARE @RoomID INT CREATE PROCEDURE dbo.uspGetClientByNames DECLARE @Action VARCHAR(50) @LastName NVARCHAR(50), @Name NVARCHAR(50) SELECT @RoomID = INSERTED.RoomID AS FROM INSERTED SELECT ClientName, ClientLastName, ClientName, ClientCountryAddress IF UPDATE ( RoomName ) FROM Client BEGIN WHERE ClientName = @Name AND ClientLastName = SET @Action = 'Updated NAME' @LastName END GO
IF UPDATE ( RoomDescription ) EXECUTE dbo.uspGetClientByNames @LastName =
BEGIN N'Lynch', @Name = N'Steven' SET @Action = 'Updated DESCRIPTION' END EXECUTE dbo.uspGetClientByNames @LastName = N'Moser', @Name = N'John' INSERT INTO dbo.Log VALUES ('Automatic Update Log', @Action + ' DROP PROCEDURE dbo.uspGetClients on Room' + CAST(@RoomID AS VARCHAR)) END DROP PROCEDURE dbo.uspGetClientByNames CREATE PROC dbo.uspGetFullNameByEmail @Email SET ANSI_NULLS ON NVARCHAR(50) GO AS SET QUOTED_IDENTIFIER ON SELECT * GO FROM Client CREATE PROCEDURE PrintClients_Cursor WHERE ClientEmail = @Email AS GO BEGIN SET NOCOUNT ON; EXEC dbo.uspGetFullNameByEmail @Email = N'[email protected]' --busca por el dominio-- DECLARE @ClientID INT , @ClientName VARCHAR(100) , @ClientLastName VARCHAR(100) CREATE PROC dbo.uspGetFullNameByEmail @Email NVARCHAR(50) DECLARE @Counter INT AS SET @Counter = 1 SELECT ClientName, ClientLastName, ClientEmail FROM Client DECLARE PrintClients CURSOR READ_ONLY WHERE ClientEmail LIKE '%' + @Email + '%' FOR GO SELECT @ClientID, @ClientName, @ClientLastName EXEC dbo.uspGetFullNameByEmail @Email = N'John' FROM Client --busca por el nombre-- OPEN PrintClients
--Agrega parametros de salida FETCH NEXT FROM PrintClients INTO
CREATE PROC dbo.uspGetReservationsCount @ClientID, @ClientName, @ClientLastName @ClientID INT, @ReservationsCount INT OUTPUT AS WHILE @@FETCH_STATUS = 0 SELECT @ReservationsCount = COUNT(*) BEGIN FROM dbo.Reservation IF @Counter = 1 WHERE ReservationClientID = @ClientID BEGIN PRINT 'ClientID' + CHAR(9) + DECLARE @ReservationsCount INT 'NAME' + CHAR(9) + 'Last Name' EXEC dbo.uspGetReservationsCount @ClientID = 3, PRINT'.........................' @ReservationsCount = @ReservationsCount OUTPUT END SELECT @ReservationsCount PRINT CAST( @ClientID AS VARCHAR(10) ) + CHAR(9) + CHAR(9) + CHAR(9) + CHAR(9) + @ClientName CREATE PROC dbo.uspError + CHAR(9) + @ClientLastName AS SELECT 1/0 SET @Counter = @Counter + 1 EXEC uspError --genera error-- FETCH NEXT FROM PrintClients INTO --revisa errores-- @ClientID, @ClientName, ALTER PROC dbo.uspError @ClientLastName AS BEGIN TRY END SELECT 1/0 CLOSE PrintClients END TRY DEALLOCATE PrintClients BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber END , ERROR_STATE() AS ErrorState GO , ERROR_MESSAGE() AS ErrorMessage , ERROR_SEVERITY() AS ErrorSeverity , ERROR_LINE() AS ErrorLine EXEC PrintClients_Cursor , ERROR_PROCEDURE() AS ErrorProcedure ; END CATCH