0% 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.
Derechos de autor
© © All Rights Reserved
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% 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.
Derechos de autor
© © All Rights Reserved
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)


WITH (Nombre nvarchar(50) '$.Nombre',
--Almacenar XML. Apellidos nvarchar(50) '$.Apellidos');
CREATE XML SCHEMA COLLECTION testSchema1
AS CREATE TABLE JSONText (
'<?xml version="1.0" encoding="UTF-8" ?> JsonData nvarchar(2000)
<xs:schema xmlns:xs= )
"http://www.w3.org/2001/XMLSchema">
<xs:element name="Viajes"> --Agregar restriccion.
<xs:complexType> ALTER TABLE JSONText
<xs:sequence> ADD CONSTRAINT [Check JSON]
<xs:element name="IdViaje" CHECK (ISJSON (JsonData)>0);
minOccurs="1" type="xs:string" />
<xs:element name="Nombre" INSERT INTO JSONText(JsonData)
minOccurs="1" type="xs:string" /> VALUES(N'[
</xs:sequence> {"Nombre": "Juan", "Apellidos": "Ugalde
</xs:complexType> Loza"},
</xs:element> {"Nombre": "Jose", "Apellidos":
</xs:schema>' "Castillo"},
]');

INSERT INTO dbo.xmlText(untyped,typed,justText)


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

EXEC uspError

También podría gustarte