PDA

View Full Version : ایجاد MASTER KEY



milad.biroonvand
جمعه 18 فروردین 1391, 11:59 صبح
سلام دوستان

من می خوام یه مسترکی بسارم ، نمی دونم چطور اینکار و بکنم ؟ هر کاری می کنم ، خطا میده ؟

با این دستور من این رو انجام می دم .




/* Create Database Master Key */
USE EncryptTest
GO
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'SQLAuthority'
GO

armitakarimi
جمعه 18 فروردین 1391, 12:05 عصر
میتونی به صفحه http://technet.microsoft.com/en-us/library/ms174382.aspx مراجعه کنی .

milad.biroonvand
جمعه 18 فروردین 1391, 12:12 عصر
خطای زیر را میگیره .

Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near 'MASTER'.

in_chand_nafar
جمعه 18 فروردین 1391, 12:38 عصر
دوست عزیز با این حالت تست کنید


USE Master
GO
--MASTER KEY ايجاد
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'DMK_Password'
GO
--MASTER KEY تهيه پشتيبان از
BACKUP MASTER KEY TO FILE = 'C:\MasterKey.bak'
ENCRYPTION BY PASSWORD = 'DMK_Password_Backup'
GO

milad.biroonvand
جمعه 18 فروردین 1391, 12:49 عصر
این دفع این خطا رو گرفت :



Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near 'MASTER'.
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'KEY'.

in_chand_nafar
جمعه 18 فروردین 1391, 13:54 عصر
دوست عزیز اگه شما می خواهید TDE را راه اندازی کنید باید نسخه شما از 2008 به بعد باشه در ضمن Compatibility مربوط به بانک اطلاعاتی خود را چک کنید حداقل آن باید 100 باشد که مربوط به 2008 است

armitakarimi
جمعه 18 فروردین 1391, 15:15 عصر
این دفع این خطا رو گرفت :



Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near 'MASTER'.
Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'KEY'.




سلام

شما احتمالا همانطور که دوستمون گفت ، بر روی سرور اس کیو ال 2008 به پایین اینکار را کرده اید ، برای چک کردن این موضوع . بر روی دیتابیس خود راست کلیک کرده و properties را زده حالا در سمت راست بر روی option کلیک کنید .
در قسمت compatibility level چک کنید ، sql 2008 که با کد 100 هست باشد ، اگر چنین نبود یعنی در اس کیو ال شما نسخه 2008 نیست .
دو حالت دارد ، اگر شما sql 2008 نصب نکرده اید که مشخص است ، در غیر اینصورت اگر نسخه شما sql server هست ، احتمالا یک نسخه دیگر هم از sql بر روی سیستم شما نصب است ، آن ها disconnect کرده و دوباره یک سرویس جدید که برای sql server2008 هست را رجیستر کنید .
چنانچه مشکل حل نشد ، پیام بگذارید .
موفق باشید .

milad.biroonvand
جمعه 18 فروردین 1391, 15:22 عصر
سلام بله دوستان درست شد ، همون مشکل از این بود که من دو تا نسخه از اس کیو ال بر روی سیستمم نصب کرده بودم ، حالا دوباره رو این مرحله گیر داده .



/* Create Encryption Certificate */
USE EncryptTest
GO
CREATE CERTIFICATE EncryptTestCert
WITH SUBJECT = 'SQLAuthority'
GO



خطای زیر رو میده

Msg 15581, Level 16, State 1, Line 1
Please create a master key in the database or open the master key in the session before performing this operation.

armitakarimi
جمعه 18 فروردین 1391, 15:26 عصر
به اینجا مراجعه کن

http://stackoverflow.com/questions/2017865/sql-server-2008-open-master-key-error-upon-physical-server-change-over

milad.biroonvand
جمعه 18 فروردین 1391, 15:37 عصر
مشکلم هنوز حل نشده ، چیکار کنم ؟

برای همون قسمت ساخت گواهینامه موندم .

armitakarimi
جمعه 18 فروردین 1391, 17:17 عصر
شما MASTER KEY را درون master ساخته اید نه دیتابیس ncryptTest . مشکل همین هست .

موفق باشید

in_chand_nafar
جمعه 18 فروردین 1391, 18:18 عصر
به این مثال توجه کن و خوب اون رو اجرا کن

--Transparent Data Encryption
USE Master
GO
--MASTER KEY ايجاد
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'DMK_Password'
GO
--MASTER KEY تهيه پشتيبان از
BACKUP MASTER KEY TO FILE = 'C:\MasterKey.bak'
ENCRYPTION BY PASSWORD = 'DMK_Password_Backup'
GO
--CERTIFICATE ايجاد
CREATE CERTIFICATE tdeCert WITH SUBJECT = 'MyCert'
GO
--CERTIFICATE تهيه نسخه پشتيبان
BACKUP CERTIFICATE tdeCert TO FILE = 'C:\CertBackup.bak'
WITH PRIVATE KEY (
FILE = 'C:\PrivateKey.bak',
ENCRYPTION BY PASSWORD = 'Cert_Password_Backup')
GO
--ايجاد بانك اطلاعاتي تستي
CREATE DATABASE TDE_Test ON PRIMARY
( NAME = 'TDE_Test', FILENAME = 'C:\TDE_Test.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
GO
USE TDE_Test
GO
-- به ازاي بانك اطلاعاتي مورد نظر ENCRYPTION KEY ساختن
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDECert
GO
--براي بانك اطلاعاتي TDE فعال سازي قابليت
ALTER DATABASE TDE_Test SET ENCRYPTION ON
GO
--ENCRYPTION بررسي وضعيت
SELECT Database_ID, Name, Is_Encrypted FROM SYS.DATABASES
GO
USE Master
GO
--كردن بانك اطلاعاتي Detach
EXEC sp_detach_db 'TDE_Test'
GO
--مي شود Attach در اين سرور وجود دارد بانك اطلاعاتي به راحتي Database Master Key,Certificate چون
-- It Can Be Attached Because DMK and Cert Already Exist
EXEC sp_attach_db 'TDE_Test', 'C:\TDE_Test.mdf'
GO
--
--كردن بانك اطلاعاتي Detach
-- Detach It Again
EXEC sp_detach_db 'TDE_Test'
GO
-- Drop Those Objects (Our Instance Becomes Like a New Instance)
DROP CERTIFICATE tdeCert
GO
DROP MASTER KEY
GO
--كنيد Attach حالا سعي كنيد بانك اطلاعاتي را
-- This Time the Database Cannot Be Attached
EXEC sp_attach_db 'TDE_Test', 'C:\TDE_Test.mdf'
GO

-- Now Bring Back the Required Objects From Backups:
RESTORE MASTER KEY FROM FILE= 'C:\MasterKey.bak'
DECRYPTION BY PASSWORD = 'DMK_Password_Backup'
ENCRYPTION BY PASSWORD = 'DMK_Password'
GO

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'DMK_Password'
GO

CREATE CERTIFICATE tdeCert FROM FILE = 'C:\CertBackup.bak'
WITH PRIVATE KEY (
FILE = 'C:\PrivateKey.bak',
DECRYPTION BY PASSWORD = 'Cert_Password_Backup')
GO
-- Now It Works
EXEC sp_attach_db 'TDE_Test', 'C:\TDE_Test.mdf'
GO

armitakarimi
جمعه 18 فروردین 1391, 20:24 عصر
سلام ، روشی که در بالا گفتید برای این خیلی خوب هست که ، میشه از سرقت دیتابیس جلوگیری کرد ، درسته ؟.

milad.biroonvand
جمعه 18 فروردین 1391, 20:30 عصر
سلام،با تشکر از پاسخ شما دوست عزیز ، برای اینکه اطلاعات بصورت ناخونا باشند باید چکار کرد، برای مثال من دیتابیس رو رو یک سرور محلی اتچ کردم،حالا میخوام وقتی که کسی اس کیو ال رو باز کرد و دیتابیس رو باز کرد نتونه اطلاعات درون فیلدهای دیتابیس رو ببینه ، البته تو لینکی که تو تاپیک قبلی فرستادی نمونه ای رو دیدم و خوب ، بود،ولی روش پیشنهادی شما چیست ؟

milad.biroonvand
جمعه 18 فروردین 1391, 20:30 عصر
اگر با ذکر مثال بگین ، خیلی بهتره .

in_chand_nafar
جمعه 18 فروردین 1391, 21:24 عصر
ببین دوست عزیز این مثال با استفاده از TDE اومده عملیات ENCو DEC رو انجام میده
TDE به صورت خودکار این کار را انجام می دهد
من پیشنهادم به شما این است که جلوی لاگین کردن کاربران غیر مجاز به SQL Server را بگیرید
البته می تونید بیاید با استفاده از ENC هم داده و رکوردها را ENC کنید که انجام این کار برای تمامی جداول زیاد جالب نیست و...
اگه تو این مثال دقت کنی با استفاده از Symmetric Key داده ها Enc شده و DEc میشه
مجبوری به ازای هربار خوندن و نوشتن اون رو باز و بسته کنی و...

-- Data Encryption
USE TempDB
GO
-- Please note that main fields are VARBINARY
CREATE TABLE Customers
(
CustomerID INT,
FullName VARCHAR(30),
CardNo VARBINARY(500),
[Desc] VARBINARY(500)
)
GO

CREATE SYMMETRIC KEY SKey_Customers WITH
ALGORITHM = DES ENCRYPTION BY PASSWORD = 'k%^Vc$sl&)*gh|'

OPEN SYMMETRIC KEY SKey_Customers
DECRYPTION BY PASSWORD = 'k%^Vc$sl&)*gh|'

SELECT * FROM SYS.OPENKEYS


INSERT Customers VALUES
(1, 'Customer 1', EncryptByKey(KEY_GUID('SK_Customers'), '1111-2222-3333-4444'),
EncryptByKey(KEY_GUID('SKey_Customers'), N'این مشتری کلاه بردار است'))

INSERT Customers VALUES
(2, 'Customer 2', EncryptByKey(KEY_GUID('SK_Customers'), '5555-6666-7777-8888'),
EncryptByKey(KEY_GUID('SKey_Customers'), N'این مشتری بسیار معتبر است'))

SELECT * FROM CUSTOMERS

SELECT CustomerID, -- Without converting to characters
FullName,
DecryptByKey(CardNo),
DecryptByKey([Desc])
FROM Customers

SELECT CustomerID, -- WITH converting to characters
FullName,
CAST(DecryptByKey(CardNo) AS VARCHAR(50)) AS CreditCardNo,
CAST(DecryptByKey([Desc]) AS NVARCHAR(50)) AS Description
FROM Customers

-- We could create a view on previous query

CLOSE SYMMETRIC KEY SK_Customers

SELECT * FROM SYS.OPENKEYS
GO
SELECT * FROM SYS.symmetric_keys
DROP SYMMETRIC KEY SK_Customers

milad.biroonvand
جمعه 18 فروردین 1391, 23:17 عصر
سلام ، لطفا راه جلوی لاگین کردن کاربران غیر مجاز به SQL Server را اگه میشه ، لطف کن و بنویس .