PDA

View Full Version : سوال: رمز نگاری دیتابیس



jafar007
دوشنبه 19 اسفند 1387, 00:05 صبح
با سلام
می خواستم بدونم چطور می شود دیتابیس را منظورم داده های داخل جداول را رمز نگاری کنیم. به صورتی که اگر کسی به دیتابیس دسترسی پیدا کند نتواند داده ها را بخواند. مثلا داده ها در هم ریخته نشان داده شود .
می خواهم فقط برنامه خودم قادر باشد تا داده ها را بخواند.
sqlServer این امکان را دارد؟
اصلا چنین کاری می شود کرد؟
اگر این کار نمی شود می خواستم بدونم از چه راه دیگری می توان امنیت داده های دیتابیس را تا حد بسیار بالایی افزایش داد؟
با تشکر

EffatBandehlou
دوشنبه 19 اسفند 1387, 08:09 صبح
دوست عزيز توابعي هستند كه اطلاعات را كد و ديكد مي كنند.
شما مي توانيد آنها را كد كرده و در بانك ذخيره كنيد و در هنگام واكشي مجدداً ديكد كنيد

AminSobati
دوشنبه 19 اسفند 1387, 10:17 صبح
سلام دوست عزیزم،
از نسخه 2005 به بعد خود SQL Server این توابع رو داره. در نسخه های قبلی باید خودتون این توابع رو بوجود بیارین.

taheri-ali
دوشنبه 19 اسفند 1387, 15:07 عصر
همچنين م يتونيد تو برنامه ترتيبي اتخاذ كنيد كه داده ها به صورت باينري تو ديتابيس ذخيره بشن

Qermezkon
دوشنبه 19 اسفند 1387, 16:35 عصر
سعي كن بانكت رو عوض كني تبديلش كن به SQL Server 2008 امكاني تحت عنوان TDE داره كه با استفاده از اون ميشه بدون تغيير كلاينت ها بانك رو Encrypt كرد.

Transparent Data Encryption

jafar007
دوشنبه 19 اسفند 1387, 16:58 عصر
با تشکر از راهنمایی های شما ها اساتید
بانک منم sql 2008 هستش .
فقط اگر لطف کنید و این دستوری را که نوشتین بگین کجا باید به کار ببرم ممنون می شم اخه من یک تازه کارم.
با سپاس

mom alone
سه شنبه 20 اسفند 1387, 23:24 عصر
من هم ممنون میشم اگه بیشتر توضیح بدین

ASKaffash
چهارشنبه 21 اسفند 1387, 12:57 عصر
سلام
این یک مثال از خود SQLServer2008 :


USE AdventureWorks;
GO
-- Create a column in which to store the encrypted data.
ALTER TABLE Sales.CreditCard
ADD CardNumber_EncryptedbyPassphrase varbinary(256);
GO
-- First get the passphrase from the user.
DECLARE @PassphraseEnteredByUser nvarchar(128);
SET @PassphraseEnteredByUser
= 'A little learning is a dangerous thing!';
-- Update the record for the user's credit card.
-- In this case, the record is number 3681.
UPDATE Sales.CreditCard
SET CardNumber_EncryptedbyPassphrase = EncryptByPassPhrase(@PassphraseEnteredByUser
, CardNumber, 1, CONVERT( varbinary, CreditCardID))
WHERE CreditCardID = '3681';
GO

SamIran
یک شنبه 29 شهریور 1388, 01:53 صبح
سلام
این یک مثال از خود SQLServer2008 :


USE AdventureWorks;
GO
-- Create a column in which to store the encrypted data.
ALTER TABLE Sales.CreditCard
ADD CardNumber_EncryptedbyPassphrase varbinary(256);
GO
-- First get the passphrase from the user.
DECLARE @PassphraseEnteredByUser nvarchar(128);
SET @PassphraseEnteredByUser
= 'A little learning is a dangerous thing!';
-- Update the record for the user's credit card.
-- In this case, the record is number 3681.
UPDATE Sales.CreditCard
SET CardNumber_EncryptedbyPassphrase = EncryptByPassPhrase(@PassphraseEnteredByUser
, CardNumber, 1, CONVERT( varbinary, CreditCardID))
WHERE CreditCardID = '3681';
GO


سلام دوست عزیز!
میشه بگی اینها چیه؟ من فقط بلدم بانک را بسازم! نمیدونم چه طوری این کارا رو انجام بدم!
اگه یه خورده بیشتر توضیح بدی ممنون میشم!

AminSobati
یک شنبه 29 شهریور 1388, 17:49 عصر
USE Master
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'DMK_Password'
GO

BACKUP MASTER KEY TO FILE = 'C:\MasterKey.bak'
ENCRYPTION BY PASSWORD = 'DMK_Password_Backup'
GO

CREATE CERTIFICATE tdeCert WITH SUBJECT = 'MyCert'
GO

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

CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE tdeCert
GO

ALTER DATABASE TDE_Test SET ENCRYPTION ON
GO

SELECT Database_ID, Name, Is_Encrypted FROM SYS.DATABASES
GO

USE Master
GO

EXEC sp_detach_db 'TDE_Test'
GO

-- It Can Be Attached Because DMK and Cert Already Exist
EXEC sp_attach_db 'TDE_Test', 'C:\TDE_Test.mdf'
GO

-- 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

-- 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

shafagh_82
یک شنبه 10 آبان 1388, 10:01 صبح
با سلام و با تشکر از زحمات دوستان!
من دو تا سوال راجع به TDEداشتم:
1- آیا استفاده از TDE سرعت کار با دیتابیس رو پایین می آره؟؟ انجام این کار در پروژه هایی که نیاز به پردازش سریع دارند مثل بانکداری مناسب است یا خیر؟
2- این نوع رمزنگاری در واقع فقط دیتابیس رو برای استفاده غیرمجاز قفل می کنه یا تمام داده هایی که در جداول نگه داشته می شوند, به صورت رمز شده نگهداری می شوند؟ و اگر اینطوره سورس StoreProcedure و ... هم کدمی شه یا نه؟
با تشکر

In_Chan_Nafar
یک شنبه 10 آبان 1388, 16:08 عصر
بالاخره استفاده از الگوريتم هاي رمز نگاري به نوعي بسته به حجم جدول داده ها ركوردها و جدول و... مي توانه سرعت را پايين بياره كه هر كس بره سراغ اين موضوع بايد اين را هم بپذيره اما من براي يك بانك نسبتا سنگين تست زدم جواب گرفتم مشكلي يش نيومد يه لينك مي زارم تا دوستان زحمت پاك كردنش رو نكشيدن دانلودش كن
نام كتاب :Expert SQL Server 2008 Encryption
http://www.wowebook.com/e-book/security/expert-sql-server-2008-encryption.html
تو اين سايت EBOOK مفت زياد است هالش رو ببر

AminSobati
سه شنبه 12 آبان 1388, 22:22 عصر
سلام دوست عزیزم،
طبیعتا TDE بار روی CPU میگذاره ولی در حدی نیست که بخواین کلا ازش منصرف بشین. در TDE همه چیز Encrypt شده ولی چون کلیدهای لازم وجود دارند، همه چیز در پشت صحنه Encrypt و Decrypt میشه و در صورتیکه دیتابیس به سرور دیگری منتقل بشه، ساخت همون کلیدها الزامیه