با دنبال کردن مراحل زیر میتوان ارتباط بین برنامه و دیتابیس را ایجاد کرد.
در این مستند فرض را بر این گرفته که server با نام ol7-121.localdomain بوده و client یک سیستم ویندوزی با نام "my-computer" میباشد و oracle client بر روی آن نصب میباشد.
ایجاد wallet بر روی سرور:
- ساخت wallet بصورت auto_login بر روی سرور
$ mkdir -p /u01/app/oracle/wallet
$ orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local
- ساخت certificate بصورت self-signed و load به wallet
$ orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650
- بررسی محتویات wallet
$ orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123
- خروجی گرفتن از certificate برای ورود به wallet در سمت client
$ orapki wallet export -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -dn "CN=`hostname`" -cert /tmp/`hostname`-certificate.crt
- بررسی محتویات certificate
$ cat /tmp/`hostname`-certificate.crt
-----BEGIN CERTIFICATE-----
MIIBqzCCARQCAQAwDQYJKoZIhvcNAQEEBQAwHjEcMBoGA1UEAxMTb2w3LTEyMS5sb2NhbGRvbWFpbjAeFw0xNTA2MjYxNDQyMDJaFw0yNTA2MjMxNDQyMDJaMB4xHDAaBgNVBAMTE29sNy0xMjEubG9jYWxkb21haW4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJIrU1fGWAwMxRobFsS0UZBD1jFUwAvnH9blsynhrQrZSkwyMBWGPRFq5tufRpaifoNVVHSrjJm/nti62A6RXECAKsug9rHL8T11FOgP3R/+Itw2jLzwpdk7MbHMxpNHz6Y2IPCmBsJ5+625dRxugVKhLsIitAW5cUpT28bkrMl9AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEABqQaP056WcPNgzSAOhJgTU/6D8uAFGCgUN57HoraXxgAN3HgmeGqhQfpb8tP+xeTF3ecqvWqJQHGdAJbuhRwpNR1rRovvlOxiv4gl0AplRzRuiygXfi6gst7KNmAdoxrTOcUQsqf/Ei9TaFl/N8E+88T2fK67JHgFa4QDs/XZWM=
-----END CERTIFICATE-----
$
ایجاد wallet بر روی کلاینت :
در صورتیکه این مرحله بر روی ویندوز اجرا گردد نیاز به oracle client خواهیم داشت.
- ایجاد wallet بصورت auto_login
d:\>mkdir -p d:\app\oracle\wallet
d:\>orapki wallet create -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -auto_login
- ساخت certificate بصورت self-signed و load به wallet
d:\>orapki wallet add -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -keysize 1024 -self_signed -validity 3650
- با دستور زیر wallet را میتوانید بررسی کنید. توجه کنید که مقدار cn که با نام کامپیوتر برابر است باید در قسمت user و trusted certificate وجود داشته باشد.
d:\>orapki wallet display -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123
Oracle PKI Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=my-computer
Trusted Certificates:
Subject: OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: OU=Secure Server Certification Authority,O=RSA Data Security\, Inc.,C=US
Subject: CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US
Subject: CN=my-computer
Subject: OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
- خروجی گرفتن از certificate برای ورود به wallet در سمت Server
d:\>orapki wallet export -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -cert d:\%computername%-certificate.crt
- بررسی certificate
d:\>more d:\%computername%-certificate.crt
تبادل certificate ها :
- در ابتدا certificate خروجی گرفته شده در سمت server را در درایو C بر روی clientکپی کرده و برعکس ، certificate خروجی گرفته شده در سمت client را بر روی /tmp از server کپی میکنیم.
در ابتدا بر روی کلاینت دستور زیر را اجرا میکنیم:
d:\>orapki wallet add -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123 -trusted_cert -cert d:\ol7-121.localdomain-certificate.crt
در اینجا بجای d:\ol7-121.localdomain-certificate.crt میبایست مسیر و نام certificate کپی شده از روی سرور جایگزین گردد.
- در این قسمت wallet بر روی client را بررسی میکنیم:
d:\>orapki wallet display -wallet "d:\app\oracle\wallet" -pwd WalletPasswd123
میبایست نام سرور در قسمت Trusted Certificates اضافه شده باشد.
Requested Certificates:
User Certificates:
Subject: CN=my-computer
Trusted Certificates:
Subject: OU=Secure Server Certification Authority,O=RSA Data Security\, Inc.,C=US
Subject: OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: CN=my-computer
Subject: OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: CN=ol7-121.localdomain
Subject: CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US
- بر روی سرور دستور زیر را اجرا میکنیم:
$ orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -trusted_cert -cert /tmp/my-computer-certificate.crt
در این قسمت به جای نام my-computer-certificate.crt ، نام certificate کپی شده از client را قرار میدهیم.
با استفاده از دستور زیر بررسی میکنیم که نام client در لیست Trusted Certificates اضافه شده باشد:
$ orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123
تغییرات فایلهای شبکه ای سرور
- تغییر فایلهای سرور:
در ابتدا خطهای زیر در فایل $ORACLE_HOME/network/admin/sqlnet.ora افاضه کنید و یا در صورت نیاز تغییر دهید:
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/wallet)
)
)
SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS,BEQ)
SSL_CLIENT_AUTHENTICATION = TRUE
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
SSL_VERSION = 1.0
سپس فایل $ORACLE_HOME/network/admin/listener.ora را بصورت زیر تغییر دهید:
SSL_CLIENT_AUTHENTICATION = TRUE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/wallet)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ol7-121.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = ol7-121.localdomain)(PORT = 2484))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
توجه داشته باشید در صورتی که ارتباط فقط باید با TCPS برقرار باشد ، خط TCP را حذف کنید.
سپس دستورات زیر را برای اعمال تغییرات انجام دهید:
$ lsnrctl stop
$ lsnrctl start
- تغییر فایلهای client:
فایل $ORACLE_HOME/network/admin/sqlnet.ora را در کلاینت اضافه کنید (توجه داشته باشید شما برای این مرحله میبایست oracle client را نصب داشته باشید).
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = D:\app\oracle\wallet)
)
)
SSL_VERSION=1.0
SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS)
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
SSL_CLIENT_AUTHENTICATION = TRUE
همچنین خطوط زیر را به فایل $ORACLE_HOME/network/admin/tnsnames.ora اضافه کنید:
pdb1_ssl=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCPS)
(HOST=ol7-121.localdomain)
(PORT=2484)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=pdb1)
)
)
در این قسمت میبایست pdb1_ssl را با نام دلخواه و pdb1 و ol7-121.localdomain را با توجه به نام سرور و نام سرویس در سرور تغییر دهید.
تست ارتباط:
برای تست ارتباط میتوان به صورت زیر عمل نمود:
c:\>sqlplus test/test@pdb1_ssl
SQL*Plus: Release 11.2.0.3.0 Production on Fri Jun 26 16:23:28 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>
به جای test باید کاربر موجود در سرور و پسورد قرار داده شود.
گرفتن دسترسی مشاهده دیتای چند ستون برای برخی از کاربران VPD COLUMN MASKING
صورت مسئله :
بدلیل حساس بودن دیتای موجود در یک ستون خاص ، میخواهیم کاری کنیم که در صورتی که تنها کاربران دارای مجوز مشاهده آن ستون به دیتابیس لاگین نمودند توانایی دیدن محتوای ستون مورد نظر را داشته باشند .
مراحل کار :
1- ایجاد یک تابع جهت تعریف کاربران مجاز
create or replace function VPD( p_owner in varchar2, p_name in varchar2 ) return varchar2
as
begin
if sys_context( 'userenv', 'session_user' ) in( 'user1','user2') --and SYS_CONTEXT('USERENV','HOST')in('DOMAIN\TESTPC','hamed')
and sys_context('userenv','ip_address') in ('192.168.1.10','192.168.1.20')
then
return NULL;
else
return '1=0';
end if;
end;
/
2- ایجاد یک POLICY به شکل زیر
BEGIN
DBMS_RLS.ADD_POLICY(object_schema=>'scott',
object_name=>'test1',
policy_name=>'english_name_col',
function_schema=>'scott',
policy_function=>'VPD',
sec_relevant_cols=>'ENGLISH_NAME,DESCRIPTION',
sec_relevant_cols_opt=>dbms_rls.ALL_ROWS);
END; /
با زدن SELECT زیر فقط کاربرانی میتوانند دیتای دو ستون فوق را مشاهده کنند که در تابع VPD اسامی آنها ذکر شده باشد
SELECT * FROM TEST1;
📌در حال حاضر ترجمه نسخه APEX 5.1 بر روي سايت http://translate-apex.com قرار نگرفته است. براي دوستان اسكريپتي فراهم شده كه مي توانند از آن استفاده نمايند.
📌اين اسكريپت شامل تغييرات آخرين نسخه مي باشد.
📌دوستاني كه تا الان پيغام هاي خود را فارسي نكردند در ابتدا از طريق سايت http://translate-apex.com/apex/f?p=800:11 اسكريپت تهيه و اجرا و بعد از آن اسكريپت زير را اجرا نماييد.
📢مراحل اجراي اسكريپت ذيل به شرح زير مي باشد:
1- اسكريپت را دانلود كرده و از طريق يك اديتور آنرا باز و ويرايش نماييد
2-در داخل فايل متن MY_WORKSPACE_NAME را جستجو و سپس نام workspace خود را جايگزين كنيد
3-در داخل فايل متن MY_APP_ID را جستجو و سپس شماره/آي دي اپليكيشن خود را جايگزين نماييد
4- فايل را ذخيره كنيد و سپس وارد محيط APEX شويد.
5- وارد قسمت SQL Workshop> SQL Scripts شويد و سپس اسكريپت مربوطه را آپلود و بعد از آن اجرا نماييد.
6- تعداد 498 پيغام به پيغام هاي قبلي شما بايد اضافه شده باشد كه در مجموع تعداد 961 پيغام مي باشد
می توانید اسکرپیت مربوط به ترجمه APEX 5.1 فارسی را از کتابخانه سایت دانلود کنید.
👈👈اميدوار هستم كه مورد استفاده دوستان قرار گيرد و منتظر نظرات گرانبهاي شما هستيم👉👉
IranAPEXCo
OracleAPEX_blog