Шифрование в SQL Server 2005
От: Zirok  
Дата: 09.02.06 15:11
Оценка:
Может кто не будь подскажет как мне работать с сертификатами, как например хранить в столбце данные, только чтоб они шефровались. Вообще как со всем этим работать?
Re: Шифрование в SQL Server 2005
От: romashka Удмуртия  
Дата: 10.02.06 07:11
Оценка:
Здравствуйте, Zirok, Вы писали:
Z>Может кто не будь подскажет как мне работать с сертификатами, как например хранить в столбце данные, только чтоб они шефровались.

примерно так:
береш данные — зашифровываешь сертикатом и сохраняешь результат в поле типа image

как работать с сертификатами — смотри статьи на rsdn по crypto api
работа с бинарными данными тоже подробно описана
в общем — поиск рулит
Re: Шифрование в SQL Server 2005
От: Merle Австрия http://rsdn.ru
Дата: 10.02.06 08:57
Оценка: 15 (3)
Здравствуйте, 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'.

Заранее благодарен.
Re: Шифрование в SQL Server 2005
От: Lepsik Гондурас https://www.kirdyk.club/
Дата: 17.07.07 03:58
Оценка:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssw0rd';

-- Create a Temp Table
if 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 DMK
CREATE 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 table
INSERT
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 data
UPDATE #Temp4
SET displayname = DecryptByCert(Cert_ID('TestCertificate4'), edisplayname),
    username = DecryptByCert(Cert_ID('TestCertificate4'), eusername)

-- View the results
SELECT *
FROM #Temp4;

-- Clean up work:  drop temp table, test certificate and master key
DROP TABLE #Temp4;

DROP CERTIFICATE TestCertificate4;

DROP MASTER KEY;
Re[2]: Шифрование в SQL Server 2005
От: jumpingjack Россия  
Дата: 23.07.08 09:48
Оценка:
Извиняюсь, что поднимаю эту тему.. Но нигде не могу найти ответ — а зачем собственно нужен master key и certificates?
Ведь и без них можно шифровать строки.. Везде куча примеров о том как их создавать, а вот как их использовать — нет ))
Re[3]: Шифрование в SQL Server 2005
От: vmpire Россия  
Дата: 23.07.08 13:41
Оценка:
Здравствуйте, 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

Master key защищает все остальные ключи в базе, чтобы не хранить их в открытом виде.
Вся система описана тут: http://msdn.microsoft.com/en-us/library/ms189586.aspx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.