CONN / AS SYSDBA
CREATE USER ols_test IDENTIFIED BY password
DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp
GRANT CONNECT, RESOURCE, SELECT_CATALOG_ROLE TO ols_test;
ALTER USER lbacsys IDENTIFIED BY lbacsys ACCOUNT UNLOCK;
CONN lbacsys/lbacsys
GRANT EXECUTE ON sa_components TO ols_test WITH GRANT OPTION;
GRANT EXECUTE ON sa_user_admin TO ols_test WITH GRANT OPTION;
GRANT EXECUTE ON sa_user_admin TO ols_test WITH GRANT OPTION;
GRANT EXECUTE ON sa_label_admin TO ols_test WITH GRANT OPTION;
GRANT EXECUTE ON sa_policy_admin TO ols_test WITH GRANT OPTION;
GRANT EXECUTE ON sa_audit_admin TO ols_test WITH GRANT OPTION;
GRANT LBAC_DBA TO ols_test;
GRANT EXECUTE ON sa_sysdba TO ols_test;
GRANT EXECUTE ON to_lbac_data_label TO ols_test;
CREATE OR REPLACE FUNCTION get_customer_label (
p_cust_type IN VARCHAR2,
p_region IN VARCHAR2,
p_credit IN NUMBER)
RETURN LBACSYS.LBAC_LABEL AS
v_label VARCHAR2(80);
BEGIN
IF p_credit > 2000 THEN
v_label := 'L3:';
ELSIF p_credit > 500 THEN
v_label := 'L2:';
ELSE
v_label := 'L1:';
END IF;
IF p_cust_type = 'PLATINUM' THEN
v_label := v_label || 'M:';
ELSE
v_label := v_label || 'E:';
END IF;
IF p_region = 'NORTH' THEN
v_label := v_label || 'R20';
ELSIF p_region = 'SOUTH' THEN
v_label := v_label || 'R40';
ELSIF p_region = 'EAST' THEN
v_label := v_label || 'R60';
ELSIF p_region = 'WEST' THEN
v_label := v_label || 'R80';
END IF;
RETURN TO_LBAC_DATA_LABEL('region_policy',v_label);
END get_customer_label;
/
SHOW ERRORS
UPDATE customers
SET first_name = first_name;
COMMIT;
สร้าง user ทดสอบ
สร้าง user อื่นๆ เพื่อทดสอบ label ได้แก่ sales_manager, sales_north, sales_south, sales_east, sales_west – sales_manager มี label ว่า L3:M,E:R20,R40,R60,R80 แปลว่า sales_manager สามารถอ่านและเขียนข้อมูลได้ทุก Region – sales_north มี label ว่า L3:E:R20,R40 แปลว่า sales_north สามารถอ่านข้อมูลที่อยู่ใน Region North และ South – sales_south มี label ว่า L3:E:R20,R40,R60,R80 แปลว่า sales_south อ่านข้อมูลได้ทุก Region – sales_east มี label ว่า L3:E:R60 แปลว่า sales_east อ่านข้อมูล Region East ได้อย่างเดียว – sales_west มี label ว่า L3:E:R80 แปลว่า sales_west อ่านข้อมูล Region West ได้อย่างเดียว
sqlplus, / as sysdba, (sales_manager, sales_nort, sales_south, sales_east, sales_west, ols_test)/password
CONN / AS SYSDBA;
CREATE USER sales_manager IDENTIFIED BY password;
CREATE USER sales_north IDENTIFIED BY password;
CREATE USER sales_south IDENTIFIED BY password;
CREATE USER sales_east IDENTIFIED BY password;
CREATE USER sales_west IDENTIFIED BY password;
GRANT CONNECT TO sales_manager, sales_north, sales_south, sales_east, sales_west;
CONN ols_test/password
BEGIN
SA_USER_ADMIN.SET_USER_LABELS('region_policy','sales_manager','L3:M,E:R20,R40,R60,R80');
SA_USER_ADMIN.SET_USER_LABELS('region_policy','sales_north','L3:E:R20,R40');
SA_USER_ADMIN.SET_USER_LABELS('region_policy','sales_south','L3:E:R20,R40,R60,R80');
SA_USER_ADMIN.SET_USER_LABELS('region_policy','sales_east','L3:E:R60');
SA_USER_ADMIN.SET_USER_LABELS('region_policy','sales_west','L3:E:R80');
END;
/
ทดสอบ Label Security
เข้าระบบผ่าน sqlplus ด้วย user ต่างๆ ที่สร้างในข้อที่แล้วเพื่อดูข้อมูลว่าถูกต้องหรือไม่ เพื่อความสะดวกจึงเข้าผ่านโปรแกรมสำเร็จรูปอื่นเพื่อให้ดูง่าย ได้ผลดังรูปต่อไปนี้นี้
คลิก Where there is a shortcode เพื่อให้ code ทำงานเฉพาะหน้าที่มีการระบุ shortcode แต่หากต้องการให้ code นี้ทำงานทุกหน้าสามารถคลิกที่ Run everywhere และสามารถเขียนคำอธิบายได้ในช่อง Description
SQL*Plus: Release 12.2.0.1.0 Production on Wed Feb 7 16:54:05 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Wed Feb 07 2018 16:52:50 +07:00
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 opt
ions
#!/bin/tcsh -f
set tday=`date +"%d"`
set tmonth=`date +"%m"`
set tyear=`date +"%Y"`
echo "Today is ${tday}-${tmonth}-${tyear}."
set yday=`expr ${tday} - 1`
echo "Yesterday was ${yday}-${tmonth}-${tyear}."
ทดสอบสคริปต์ด้วยคำสั่ง
tcsh date.tcsh
ไม่อยากพิมพ์ tcsh ทุกครั้งเพิ่ม execution bit ด้วยคำสั่ง
-d, –date=STRING
display time described by STRING, not ‘now’
และเมื่่อเลื่อนลงมาล่างสุดจะพบว่า
DATE STRING
The –date=STRING is a mostly free format human readable date string such as “Sun, 29 Feb 2004 16:21:42 -0800” or
“2004-02-29 16:21:42” or even “next Thursday”. A date string may contain items indicating calendar date, time of day,
time zone, day of week, relative time, relative date, and numbers. An empty string indicates the beginning of the day.
The date string format is more complex than is easily documented here but is fully described in the info documentation.
#!/bin/tcsh -f set tday=`date -d today +"%d-%m-%Y"` set yday=`date -d yesterday +"%d-%m-%Y"` echo "Today is ${tday}." echo "Yesterday was ${yday}."
เจ็บมาเท่าไหร่แล้วกับคำว่าไม่อ่านเอกสาร….
ยังใส่ข้อความอื่นๆ แทน string ได้เช่น date -d 'tomorrow' date -d '-1 days ago' date -d '200 days' date -d '1000 weeks' date -d '30 months' date -d '300 years'
cat >>fix.sql<<EOF
CREATE OR REPLACE NONEDITIONABLE TYPE "SYS"."KU$_RADM_FPTM_T" as object
(
vers_major char(1), /* UDT major version # */
vers_minor char(1), /* UDT minor version # */
numbercol number, /* number */
binfloatcol binary_float, /* binary float */
bindoublecol binary_double, /* binary double */
charcol char(1), /* fixed-size character */
varcharcol varchar2(1), /* variable-size character */
ncharcol nchar(1), /* fixed-size national character */
nvarcharcol nvarchar2(1), /* variable-size national character */
datecol date, /* date */
ts_col timestamp, /* timestamp */
tswtz_col timestamp with time zone, /* timestamp with time zone */
fpver number /* version of default fixed point values */
)
/
CREATE OR REPLACE FORCE NONEDITIONABLE VIEW "SYS"."KU$_RADM_FPTM_VIEW" OF "SYS"."KU$_RADM_FPTM_T"
WITH OBJECT IDENTIFIER (fpver) AS
select '1','0',
numbercol, binfloatcol, bindoublecol,
charcol, varcharcol, ncharcol, nvarcharcol,
datecol,ts_col,tswtz_col, fpver
from sys.radm_fptm$
where fpver=1
/
EOF
เชื่อมต่อกับฐานข้อมูลด้วย sqlplus ด้วยบัญชีผู้ใช้ / as sysdba