Может кто не будь подскажет как мне работать с сертификатами, как например хранить в столбце данные, только чтоб они шефровались. Вообще как со всем этим работать?
Здравствуйте, Zirok, Вы писали: Z>Может кто не будь подскажет как мне работать с сертификатами, как например хранить в столбце данные, только чтоб они шефровались.
примерно так:
береш данные — зашифровываешь сертикатом и сохраняешь результат в поле типа image
как работать с сертификатами — смотри статьи на rsdn по crypto api
работа с бинарными данными тоже подробно описана
в общем — поиск рулит
Здравствуйте, Zirok, Вы писали:
Z>Может кто не будь подскажет как мне работать с сертификатами, как например хранить в столбце данные, только чтоб они шефровались. Вообще как со всем этим работать?
Создаешь Database Master Key. На основе DMK создаешь сертификат или ассиметричный ключ, на основе сертификата или ассиметричного ключа можно создать симметричный ключ (хотя есть варианты создания всех ключей и сертификатов на основе пароля).
Потом шифруешь нужные данные этим ключем или сертификатом, а нужному пользователю даешь права на пользование нужным ключем. Все.
Вот демка с прошлых дней разработчика:
CREATE DATABASE Cavy
USE Cavy
-- тестовая табличка
--create table employees (id int primary key, name varchar(300), salary varbinary(300));
-- ключ на основе пароля
-- create symmetric key sk_employees with algorithm = aes_192 encryption by password = 'Pufd&s@))%';
-- открыть ключь, для того чтобы им можно было пользоваться
--open symmetric key sk_employees decryption by password = 'Pufd&s@))%';
-- добавление данных
-- insert into employees values (101, 'Hemmul', encryptbykey(key_guid('sk_employees'), '$200000', 1, '101'));
insert into employees values (102, 'Mummy', encryptbykey(key_guid('sk_employees'), '$100000', 1, '102'));
-- Убеждаемся, что все зашифровано
--select * from employees;
-- расшифровываем
--select id, name, convert(varchar(10), decryptbykey(salary, 1, convert(varchar(30), id))) as salary from employees
-- закрываем ключ
--close symmetric key sk_employees;
-- Убеждаемся что больше ничерта не расшифровывается
--select id, name, convert(varchar(10), decryptbykey(salary, 1, convert(varchar(30), id))) as salary from employees
Соответственно для того чтобы расшифровать надо знать пароль и открыть ключ с этим праолем.
Это если ключ создан на основе пароля. С сертификатом, работать удобнее, достаточно просто дать нужному пользователю права на сертификат.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Мы уже победили, просто это еще не так заметно...
Re[2]: Шифрование в SQL Server 2005
От:
Аноним
Дата:
28.06.07 13:44
Оценка:
Здравствуйте, Merle, Вы писали:
M>Здравствуйте, Zirok, Вы писали:
Z>>Может кто не будь подскажет как мне работать с сертификатами, как например хранить в столбце данные, только чтоб они шефровались. Вообще как со всем этим работать? M>Создаешь Database Master Key. На основе DMK создаешь сертификат или ассиметричный ключ, на основе сертификата или ассиметричного ключа можно создать симметричный ключ (хотя есть варианты создания всех ключей и сертификатов на основе пароля). M>Потом шифруешь нужные данные этим ключем или сертификатом, а нужному пользователю даешь права на пользование нужным ключем. Все. M>Вот демка с прошлых дней разработчика: M>
M>CREATE DATABASE Cavy
M>USE Cavy
M>-- тестовая табличка
M>--
M>create table employees (id int primary key, name varchar(300), salary varbinary(300));
M>-- ключ на основе пароля
M>--
M>create symmetric key sk_employees with algorithm = aes_192 encryption by password = 'Pufd&s@))%';
M>-- открыть ключь, для того чтобы им можно было пользоваться
M>--
M>open symmetric key sk_employees decryption by password = 'Pufd&s@))%';
M>-- добавление данных
M>--
M>insert into employees values (101, 'Hemmul', encryptbykey(key_guid('sk_employees'), '$200000', 1, '101'));
M>insert into employees values (102, 'Mummy', encryptbykey(key_guid('sk_employees'), '$100000', 1, '102'));
M>-- Убеждаемся, что все зашифровано
M>--
M>select * from employees;
M>-- расшифровываем
M>--
M>select id, name, convert(varchar(10), decryptbykey(salary, 1, convert(varchar(30), id))) as salary from employees
M>-- закрываем ключ
M>--
M>close symmetric key sk_employees;
M>-- Убеждаемся что больше ничерта не расшифровывается
M>--
M>select id, name, convert(varchar(10), decryptbykey(salary, 1, convert(varchar(30), id))) as salary from employees
M>
M>Соответственно для того чтобы расшифровать надо знать пароль и открыть ключ с этим праолем. M>Это если ключ создан на основе пароля. С сертификатом, работать удобнее, достаточно просто дать нужному пользователю права на сертификат.
Здраствуйте, у меня возник вопрос, нет ли какого либо другого способа реализовать шифрование данных средствами 2005го сервера (всмысле только так или можно попроще ?)
и собственно, насколько я понял open symmetric key sk_employees decryption by password = 'Pufd&s@))%';
открываетключь только на время жизни сессии ? есть ли возможность обойти это ограничение, либо придется писать хранимую процедуру, которая будет открывать\криптать-декриптать\закрывать ключ. ?
Re: Шифрование в SQL Server 2005
От:
Аноним
Дата:
29.06.07 11:41
Оценка:
Здравствуйте, Zirok, Вы писали:
Z>Может кто не будь подскажет как мне работать с сертификатами, как например хранить в столбце данные, только чтоб они шефровались. Вообще как со всем этим работать?
Подскажите пожалуста, в чем проблема ?
Это работает
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJKL95234nl0zBe';
Это нет =(((
DECLARE @password varchar(100);
SET @password = '23987hxJKL95234nl0zBe';
CREATE MASTER KEY ENCRYPTION BY PASSWORD = @password;
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '@password'.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssw0rd';
-- Create a Temp Tableif object_id('tempdb.dbo.#Temp4')> 0
DROP table #Temp4
CREATE TABLE #Temp4
(ID INT PRIMARY KEY,
edisplayname NVARCHAR(200),
eusername NVARCHAR(200),
displayname NVARCHAR(200),
username NVARCHAR(200));
-- Create a Test Certificate, encrypted by the DMKCREATE CERTIFICATE TestCertificate4
WITH SUBJECT = 'Adventureworks Test Certificate',
EXPIRY_DATE = '10/31/2009';
if object_id('UserList') > 0
DROP table UserList
GO
CREATE TABLE UserList (id int not null identity(1,1), displayname sysname, username sysname, edisplayname nvarchar(255), eusername nvarchar(255))
GO
INSERT INTO UserList (displayname, username) values ('master', 'Петров')
INSERT INTO UserList (displayname, username) values ('slave', 'Иванов')
-- EncryptByCert demonstration encrypts 100 names from the Person.Contact tableINSERT
INTO #Temp4(ID, edisplayname, eusername)
SELECT ID, EncryptByCert(Cert_ID('TestCertificate4'), displayname),
EncryptByCert(Cert_ID('TestCertificate4'), username)
FROM UserList
-- DecryptByCert demonstration decrypts the previously encrypted dataUPDATE #Temp4
SET displayname = DecryptByCert(Cert_ID('TestCertificate4'), edisplayname),
username = DecryptByCert(Cert_ID('TestCertificate4'), eusername)
-- View the resultsSELECT *
FROM #Temp4;
-- Clean up work: drop temp table, test certificate and master keyDROP TABLE #Temp4;
DROP CERTIFICATE TestCertificate4;
DROP MASTER KEY;
Извиняюсь, что поднимаю эту тему.. Но нигде не могу найти ответ — а зачем собственно нужен master key и certificates?
Ведь и без них можно шифровать строки.. Везде куча примеров о том как их создавать, а вот как их использовать — нет ))
Здравствуйте, jumpingjack, Вы писали:
J>Извиняюсь, что поднимаю эту тему.. Но нигде не могу найти ответ — а зачем собственно нужен master key и certificates? J>Ведь и без них можно шифровать строки.. Везде куча примеров о том как их создавать, а вот как их использовать — нет ))
Из MSDN:
The database master key is a symmetric key used to protect the private keys of certificates and asymmetric keys that are present in the database