10/09/2020 09:42:00 p. m.
Share:
Blog Informático sobre Análisis y Desarrollo de Software.
CREATE LOGIN [LoginFinanciera] WITH PASSWORD = N'Protect2020' GO CREATE LOGIN [LoginFinanciera] WITH PASSWORD = N'Protect2020', DEFAULT_DATABASE=[FinancieraDemoBD] -- creación de login desde Windows CREATE LOGIN [LoginFinanciera] FROM WINDOWS WITH DEFAULT_DATABASE=[FinancieraDemoBD]Asignación de Roles a Login
-- Agregar rol dbcreator al login EXEC sp_addsrvrolemember 'LoginFinanciera', 'dbcreator'
USE FinancieraDemoBD GO CREATE USER [UsuarioBDFinanciera] FOR LOGIN [LoginFinanciera] GO -- conceder permisos al usuario para que realice Select sobre una tabla de la BD. GRANT SELECT ON dbo.CLIENTE TO UsuarioBDFinanciera GO
-- Eliminar Login y Usuario drop login LoginFinanciera drop user UsuarioBDFinanciera
-- CREACION DE LOGIN USE [master] GO IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = N'LoginFinanciera') CREATE LOGIN [LoginFinanciera] WITH PASSWORD = N'Protect2020', DEFAULT_DATABASE=[FinancieraDemoBD] -- CREACION DE USUARIO DE BASE DE DATOS USE [FinancieraDemoBD] GO IF NOT EXISTS(SELECT name FROM sys.sysusers WHERE name = 'UsuarioBDFinanciera') CREATE USER [UsuarioBDFinanciera] FOR LOGIN [LoginFinanciera] GO
-- ASIGNACION DE PERMISOS EXEC sp_addrolemember N'db_datareader', N'UsuarioBDFinanciera' GO EXEC sp_addrolemember N'db_datawriter', N'UsuarioBDFinanciera' GO GRANT EXECUTE TO [UsuarioBDFinanciera] -- DAR PERMISOS AL USUARIO DE BASE DE DATOS SOBRE PROCEDIMIENTOS ALMACENADOS Y TABLAS USE [FinancieraDemoBD] GO GRANT EXECUTE ON [spListar_Clientes] TO [UsuarioBDFinanciera]; GRANT EXECUTE ON [spInsertar_Cliente] TO [UsuarioBDFinanciera]; GRANT EXECUTE ON [spListar_Proveedor] TO [UsuarioBDFinanciera]; GRANT EXECUTE ON [spInsertar_Proveedor] TO [UsuarioBDFinanciera]; GRANT SELECT,INSERT,UPDATE,DELETE ON [CLIENTE] TO [UsuarioBDFinanciera]; GRANT SELECT,INSERT,UPDATE,DELETE ON [PROVEEDOR] TO [UsuarioBDFinanciera]; GRANT SELECT,INSERT,UPDATE,DELETE ON "dbo"."COLABORADOR" TO "UsuarioBDFinanciera"; -- PERMISO ESPECIAL --> EVALUAR CONSIDERACIONES DE SEGURIDAD GRANT ALTER ON "dbo"."CLIENTE" TO "UsuarioBDFinanciera"; GO
-- *** Ver los Inicios de Sesión de la Instancia de SQL Server *** select sid, name, dbname, password, loginname from master..syslogins
-- Ver los inicios de Sesion select * from sys.server_principals
-- *** Ver los Usuarios de la Base de Datos actual de SQL Server *** use FinancieraDemoBD GO select uid, name, sid, * from sysusers where islogin=1
select * from sys.database_principals
USE FinancieraDemoBD GO -- sacaremos una copia de seguridad de la DMK BACKUP MASTER KEY TO FILE = 'D:\BACKUP\PERSONAL\DMK.dat' ENCRYPTION BY PASSWORD = 'TopSecret2020MK'; GO -- Sacaremos una copia de seguridad del certificado BACKUP CERTIFICATE FinancieraCertificado TO FILE = 'D:\BACKUP\PERSONAL\FinancieraCertificadoCS.cer' WITH PRIVATE KEY ( FILE = 'D:\BACKUP\PERSONAL\FinancieraCertificadoCS.key' , ENCRYPTION BY PASSWORD = 'TopSecret2020C' ); GOAhora borraremos la llave simetrica, el certificado y la master key
DROP SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC GO -- Ahora perderemos el certificado. DROP CERTIFICATE FinancieraCertificado GO -- Ahora perderemos la DMK DROP MASTER KEY GO
RESTORE MASTER KEY FROM FILE = 'D:\BACKUP\PERSONAL\DMK.dat' DECRYPTION BY PASSWORD = 'TopSecret2020MK' ENCRYPTION BY PASSWORD = 'TopSecret2020MKN' GO -- Ahora abrimos la DMK sino no podremos restaurar el certificado OPEN MASTER KEY DECRYPTION BY PASSWORD = 'TopSecret2020MKN' GO -- Ahora restauramos el certificado CREATE CERTIFICATE FinancieraCertificado FROM FILE = 'D:\BACKUP\PERSONAL\FinancieraCertificadoCS.cert' WITH PRIVATE KEY (FILE = 'D:\BACKUP\PERSONAL\FinancieraCertificadoCS.key', DECRYPTION BY PASSWORD = 'TopSecret2020C'); GO -- Ahora recreamos la llave simetrica CREATE SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC WITH KEY_SOURCE = 'ClaveSimetrica2020', IDENTITY_VALUE = 'MiValorIdentidad', ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE FinancieraCertificado GO
OPEN SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC DECRYPTION BY CERTIFICATE FinancieraCertificado; -- Ahora seleccionamos los datos pero antes los desencriptamos con la llave simetrica SELECT MATRICULACOLABORADOR, CONVERT(VARCHAR(100),DECRYPTBYKEY(NOMBRES)) AS NOMBRES, CONVERT(VARCHAR(100),DECRYPTBYKEY(APELLIDOS)) AS APELLIDOS FROM dbo.COLABORADOR /* MATRICULACOLABORADOR NOMBRES APELLIDOS CAR001 CESAR ANTONIO AVILA ROBLES */ -- Y ahora volvemos a cerrar la llave simetrica CLOSE SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC
IF (DATABASEPROPERTY('FinancieraDemoBD','version') > 0) BEGIN USE MASTER ALTER DATABASE FinancieraDemoBD SET single_user WITH ROLLBACK IMMEDIATE DROP DATABASE FinancieraDemoBD END -- Creamos la Base de Datos de prueba use master GO create database FinancieraDemoBD GO -- Usamos la Base de Datos de Prueba use FinancieraDemoBD GO -- Creamos una tabla cliente con las columnas Nombre y NombreCorto -- de tipo varbinary para que contenga la informacion encriptada CREATE TABLE [dbo].[CLIENTE]( [IDCLIENTE] [int] IDENTITY(1,1) NOT NULL, [FECING] [datetime] NULL, [USUING] [varchar](6) NULL, [FECACT] [datetime] NULL, [USUACT] [varchar](6) NULL, [NOMBRE] [varbinary](max) NOT NULL, [NOMBRECORTO] [varbinary](max) NULL, PRIMARY KEY CLUSTERED ( [IDCLIENTE] ASC ) ) ON [PRIMARY] GO -- Crear una Database Master Key CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ClaveSecretaINFO2020' GO -- Crear el Certificado CREATE CERTIFICATE FinancieraCertificado WITH SUBJECT='INFOTACTICAS Certificate', EXPIRY_DATE = '20211231' GO -- Consultar los certificados creados en la base de datos SELECT name, pvt_key_encryption_type_desc, subject, expiry_date FROM sys.certificates /* name pvt_key_encryption_type_desc subject expiry_date FinancieraCertificado ENCRYPTED_BY_MASTER_KEY INFOTACTICAS Certificate 2021-12-31 00:00:00.000 */ -- Insertar un valor INSERT INTO dbo.CLIENTE (FECING, USUING, NOMBRE, NOMBRECORTO) VALUES (getdate(), 'IRE001', ENCRYPTBYCERT(CERT_ID('FinancieraCertificado'),'CARLOS FLORES RIOS'), ENCRYPTBYCERT(CERT_ID('FinancieraCertificado'),'CARLOS FLORES')) GO -- Select convencional SELECT IDCLIENTE, NOMBRE, NOMBRECORTO, FECING FROM dbo.CLIENTE /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 0xC118457BFAA... 0xEF308BFC78424F717... 2020-10-08 23:47:39.520 */ -- Select desencriptando los datos con el certificado correcto SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 CARLOS FLORES RIOS CARLOS FLORES 2020-10-08 23:47:39.520 */
USE FinancieraDemoBD GO -- Sacar una copia de seguridad del certificado BACKUP CERTIFICATE FinancieraCertificado TO FILE = 'D:\BACKUPS\PERSONAL\FinancieraCertificado.cer' WITH PRIVATE KEY ( FILE = 'D:\BACKUPS\PERSONAL\FinancieraCertificado.key' , ENCRYPTION BY PASSWORD = 'TopSecretINFO2020' ); GOSe borrará el certificado para simular su pérdida en escenarios donde se hace un backup de la base de datos y se restaurá en otro servidor y dicho certificado no se guardó con el backup.
-- Eliminar el certificado. DROP CERTIFICATE FinancieraCertificado GO -- Podemos confirmar que nuestro certificado no esta y no podemos desencriptar nuestra informacion SELECT name, pvt_key_encryption_type_desc, subject, expiry_date FROM sys.certificates SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 NULL NULL 2020-10-08 23:47:39.520 */Probaremos a crear nuevamente el certificado a ver si todo funcionara nuevamente.
-- Creamos el certificado CREATE CERTIFICATE FinancieraCertificado WITH SUBJECT='INFOTACTICAS Certificate', EXPIRY_DATE = '20211231' GO -- Probamos desencriptar la informacion SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 NULL NULL 2020-10-08 23:47:39.520 */Sin embargo, no funcionó debido a que el certificado que se usó no es el mismo que encripto la información, a pesar de que se creó el certificado con la misma instrucción. Volveremos a eliminar el certificado y restaurarlo desde el backup.
-- Volvemos a eliminar el certificado DROP CERTIFICATE FinancieraCertificado GO -- Ahora restauramos el certificado desde nuestra copia de seguridad CREATE CERTIFICATE FinancieraCertificado FROM FILE = 'D:\BACKUPS\PERSONAL\FinancieraCertificado.cer' WITH PRIVATE KEY (FILE = 'D:\BACKUPS\PERSONAL\FinancieraCertificado.key', DECRYPTION BY PASSWORD = 'TopSecretINFO2020'); GO -- Finalmente volvemos a consultar la informacion SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE
-- -- IF (DATABASEPROPERTY('FinancieraDemoBD','version') > 0) BEGIN USE MASTER ALTER DATABASE FinancieraDemoBD SET single_user WITH ROLLBACK IMMEDIATE DROP DATABASE FinancieraDemoBD END -- Creamos la Base de Datos de prueba use master GO create database FinancieraDemoBD GO -- Usamos la Base de Datos de Prueba use FinancieraDemoBD GO -- Creamos una tabla cliente con las columnas Nombre y NombreCorto -- de tipo varbinary para que contenga la informacion encriptada CREATE TABLE [dbo].[PROVEEDOR]( [IDPROVEEDOR] [int] IDENTITY(1,1) NOT NULL, [FECING] [datetime] NULL, [USUING] [varchar](6) NULL, [FECACT] [datetime] NULL, [USUACT] [varchar](6) NULL, [NOMBRE] [varbinary](max) NOT NULL PRIMARY KEY CLUSTERED ( [IDPROVEEDOR] ASC ) ) ON [PRIMARY] GO -- Insertar un valor INSERT INTO dbo.PROVEEDOR (FECING, USUING, NOMBRE) VALUES (getdate(), 'IRE001', ENCRYPTBYPASSPHRASE('ClaveSecretaIRE','ANDRES LARA FABIAN')) GO -- Select convencional SELECT IDPROVEEDOR, NOMBRE, FECING FROM dbo.PROVEEDOR /* IDPROVEEDOR NOMBRE FECING 1 0x01000000DC8... 2020-10-08 23:36:54.097 */ -- Select con una frase incorrecta SELECT IDPROVEEDOR, CONVERT(VARCHAR(100), DECRYPTBYPASSPHRASE('ClaveSecreta',NOMBRE)) as 'NOMBRE', FECING FROM dbo.PROVEEDOR /* IDPROVEEDOR NOMBRE FECING 1 NULL 2020-10-08 23:14:56.043 */ -- Select con la frase correcta SELECT IDPROVEEDOR, CONVERT(VARCHAR(100), DECRYPTBYPASSPHRASE('ClaveSecretaIRE',NOMBRE)) as 'NOMBRE', FECING FROM dbo.PROVEEDOR /* IDPROVEEDOR NOMBRE FECING 1 ANDRES LARA FABIAN 2020-10-08 23:14:56.043 */
IF (DATABASEPROPERTY('FinancieraDemoBD','version') > 0) BEGIN USE MASTER ALTER DATABASE FinancieraDemoBD SET single_user WITH ROLLBACK IMMEDIATE DROP DATABASE FinancieraDemoBD END -- Creamos la Base de Datos de prueba use master GO create database FinancieraDemoBD GO -- Usamos la Base de Datos de Prueba use FinancieraDemoBD GO -- Creamos una tabla cliente con las columnas Nombre y NombreCorto -- de tipo varbinary para que contenga la informacion encriptada CREATE TABLE [dbo].[CLIENTE]( [IDCLIENTE] [int] IDENTITY(1,1) NOT NULL, [FECING] [datetime] NULL, [USUING] [varchar](6) NULL, [FECACT] [datetime] NULL, [USUACT] [varchar](6) NULL, [NOMBRE] [varbinary](max) NOT NULL, [NOMBRECORTO] [varbinary](max) NULL, PRIMARY KEY CLUSTERED ( [IDCLIENTE] ASC ) ) ON [PRIMARY] GO -- Crear una Database Master Key CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ClaveSecretaINFO2020' GO -- Crear el Certificado CREATE CERTIFICATE FinancieraCertificado WITH SUBJECT='INFOTACTICAS Certificate', EXPIRY_DATE = '20211231' GO -- Consultar los certificados que creados en la base de datos SELECT name, pvt_key_encryption_type_desc, subject, expiry_date FROM sys.certificates /* name pvt_key_encryption_type_desc subject expiry_date FinancieraCertificado ENCRYPTED_BY_MASTER_KEY INFOTACTICAS Certificate 2021-12-31 00:00:00.000 */ -- Insertar un valor INSERT INTO dbo.CLIENTE (FECING, USUING, NOMBRE, NOMBRECORTO) VALUES (getdate(), 'IRE001', ENCRYPTBYCERT(CERT_ID('FinancieraCertificado'),'CARLOS FLORES RIOS'), ENCRYPTBYCERT(CERT_ID('FinancieraCertificado'),'CARLOS FLORES')) GO -- Select convencional SELECT IDCLIENTE, NOMBRE, NOMBRECORTO, FECING FROM dbo.CLIENTE /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 0xC118457BFAA... 0xEF308BFC78424F717... 2020-10-08 23:47:39.520 */ -- Select desencriptando los datos con el certificado correcto SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 CARLOS FLORES RIOS CARLOS FLORES 2020-10-08 23:47:39.520 */ -- Select desencriptando los datos con el certificado incorrecto SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificadoOTRO'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 NULL CARLOS FLORES 2020-10-08 23:14:56.043 */
-- -- Crear un usuario de prueba CREATE LOGIN [UsuarioFinanciera] WITH PASSWORD = N'Financiera2020' GO CREATE USER [UsuarioFinanciera] FOR LOGIN [UsuarioFinanciera] GO GRANT SELECT ON dbo.CLIENTE TO [UsuarioFinanciera] GO -- Seleccionar la informacion con el certificado EXECUTE AS USER = 'UsuarioFinanciera' SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE; REVERT /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 NULL NULL 2020-10-08 23:47:39.520 */ -- La informacion sale como NULL debido a que no se tiene -- permiso para usuar el certificado como el UsuarioFinanciera -- Para hacer uso del certificado se debe tener el permiso -- de control sobre el certificado. Ahora asignaremos ese permiso al UsuarioFinanciera GRANT CONTROL ON CERTIFICATE::[FinancieraCertificado] TO [UsuarioFinanciera] GO -- Seleccionar de nuevo la informacion con el certificado EXECUTE AS USER = 'UsuarioFinanciera' SELECT IDCLIENTE, CONVERT(VARCHAR(100), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRE)) as 'NOMBRE', CONVERT(VARCHAR(70), DECRYPTBYCERT(CERT_ID('FinancieraCertificado'),NOMBRECORTO)) as 'NOMBRECORTO', FECING FROM dbo.CLIENTE; REVERT /* IDCLIENTE NOMBRE NOMBRECORTO FECING 1 CARLOS FLORES RIOS CARLOS FLORES 2020-10-08 23:47:39.520 */
IF (DATABASEPROPERTY('FinancieraDemoBD','version') > 0) BEGIN USE MASTER ALTER DATABASE FinancieraDemoBD SET single_user WITH ROLLBACK IMMEDIATE DROP DATABASE FinancieraDemoBD END -- Creamos la Base de Datos de prueba use master GO create database FinancieraDemoBD GO -- Usamos la Base de Datos de Prueba use FinancieraDemoBD GO -- Creamos una tabla COLABORADOR con las columnas Nombres y Apellidos -- de tipo varbinary para que contenga la informacion encriptada CREATE TABLE [dbo].[COLABORADOR]( [IDCOLABORADOR] [int] IDENTITY(1,1) NOT NULL, [MATRICULACOLABORADOR] [varchar](6) NOT NULL, [FECING] [datetime] NULL, [USUING] [varchar](6) NULL, [FECACT] [datetime] NULL, [USUACT] [varchar](6) NULL, [NOMBRES] [varbinary](max) NOT NULL, [APELLIDOS] [varbinary](max) NOT NULL, PRIMARY KEY CLUSTERED ( [IDCOLABORADOR] ASC ) ) ON [PRIMARY] GO -- Crear una Database Master Key CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ClaveSecretaINFO2020' GO -- Crear el Certificado CREATE CERTIFICATE FinancieraCertificado WITH SUBJECT='INFOTACTICAS Certificate', EXPIRY_DATE = '20211231' GO -- Consultar los certificados que creados en la base de datos SELECT name, pvt_key_encryption_type_desc, subject, expiry_date FROM sys.certificates /* name pvt_key_encryption_type_desc subject expiry_date FinancieraCertificado ENCRYPTED_BY_MASTER_KEY INFOTACTICAS Certificate 2021-12-31 00:00:00.000 */Para crear la llave simétrica
-- Creamos la llave simetrica CREATE SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC WITH KEY_SOURCE = 'ClaveSimetrica2020', IDENTITY_VALUE = 'MiValorIdentidad', ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE FinancieraCertificado; GO -- Hacemos una consulta para visualizar las llaves simetricas de la base de datos -- en este caso podemos observar 2: las cuales son la DMK y la llave simetrica creada -- a partir del certificado. SELECT name, algorithm_desc, create_date--, * FROM sys.symmetric_keys /* name algorithm_desc create_date ##MS_DatabaseMasterKey## AES_256 2020-10-08 23:45:00.460 FINANCIERA_KEY_SYMMETRIC AES_256 2020-10-09 16:40:52.293 */Ahora procederemos a ingresar valores a nuestra tabla. Para esto debemos abrir la llave simetrica, insertar un valor y Una vez que se termino de encriptar los datos, se cierra la llave simetrica.
-- Abrir la llave simétrica OPEN SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC DECRYPTION BY CERTIFICATE FinancieraCertificado; -- insertamos un valor INSERT INTO dbo.COLABORADOR (MATRICULACOLABORADOR, FECING, USUING, NOMBRES, APELLIDOS) VALUES ('CAR001', getdate(), 'IRE001', ENCRYPTBYKEY(KEY_GUID('FINANCIERA_KEY_SYMMETRIC'),'CESAR ANTONIO'), ENCRYPTBYKEY(KEY_GUID('FINANCIERA_KEY_SYMMETRIC'),'AVILA ROBLES')) GO -- Una vez que se termino de encriptar los datos, se cierra la llave simetrica CLOSE SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC -- Intentamos hacer un select convencional SELECT MATRICULACOLABORADOR, NOMBRES, APELLIDOS FROM dbo.COLABORADOR /* MATRICULACOLABORADOR NOMBRES APELLIDOS CAR001 0x0034CE8C5... 0x0034CE8C5716... */Para poder ver los datos debemos desencriptarlos con la llave simetrica, y para hacerlo debemos primero abrirla.
OPEN SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC DECRYPTION BY CERTIFICATE FinancieraCertificado; -- Ahora seleccionamos los datos pero antes los desencriptamos con la llave simetrica SELECT MATRICULACOLABORADOR, CONVERT(VARCHAR(100),DECRYPTBYKEY(NOMBRES)) AS NOMBRES, CONVERT(VARCHAR(100),DECRYPTBYKEY(APELLIDOS)) AS APELLIDOS FROM dbo.COLABORADOR /* MATRICULACOLABORADOR NOMBRES APELLIDOS CAR001 CESAR ANTONIO AVILA ROBLES */ -- Y ahora volvemos a cerrar la llave simetrica CLOSE SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC
CREATE LOGIN [UsuarioCAFinanciera] WITH PASSWORD = N'Protect2020' GO CREATE USER [UsuarioCAFinanciera] FOR LOGIN [UsuarioCAFinanciera] GO GRANT SELECT ON dbo.COLABORADOR TO UsuarioCAFinanciera GO -- Probamos seleccionar la informacion con la llave simetrica EXECUTE AS USER = 'UsuarioCAFinanciera' OPEN SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC DECRYPTION BY CERTIFICATE FinancieraCertificado; SELECT MATRICULACOLABORADOR, CONVERT(VARCHAR(100),DECRYPTBYKEY(NOMBRES)) AS NOMBRES, CONVERT(VARCHAR(100),DECRYPTBYKEY(APELLIDOS)) AS APELLIDOS FROM dbo.COLABORADOR REVERTAparece un error porque el usuario no tiene permisos sobre la llave simetrica. Para poder hacer uso de la llave simetrica debemos tener el permiso de control sobre el certificado que la encripta y sobre la misma llave simetrica.
-- Ahora asignaremos ese permiso al UsuarioCAFinanciera GRANT CONTROL ON CERTIFICATE::[FinancieraCertificado] TO [UsuarioCAFinanciera] GO GRANT CONTROL ON SYMMETRIC KEY::FINANCIERA_KEY_SYMMETRIC TO UsuarioCAFinanciera GO -- Probamos seleccionar la informacion con la llave simetrica EXECUTE AS USER = 'UsuarioCAFinanciera' OPEN SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC DECRYPTION BY CERTIFICATE FinancieraCertificado; SELECT MATRICULACOLABORADOR, CONVERT(VARCHAR(100),DECRYPTBYKEY(NOMBRES)) AS NOMBRES, CONVERT(VARCHAR(100),DECRYPTBYKEY(APELLIDOS)) AS APELLIDOS FROM dbo.COLABORADOR CLOSE SYMMETRIC KEY FINANCIERA_KEY_SYMMETRIC REVERT /* MATRICULACOLABORADOR NOMBRES APELLIDOS CAR001 CESAR ANTONIO AVILA ROBLES */Ahora la informacion si aparece.
0 comentarios: