Sep 17, 2008

with admin option 和 with grant option

在賦予user 許可權或者role 時,常常會用到with admin option 和with grant option,
而在使用中,可能會很容易出現混淆的情況,現把他們的相同點和不同點總結如下:
相同點:
- 兩個都可以既可以賦予user 許可權時使用,也可以在賦予role 時用
GRANT CREATE SESSION TO emi WITH ADMIN OPTION;
GRANT CREATE SESSION TO role WITH ADMIN OPTION;
GRANT role1 to role2 WITH ADMIN OPTION;
GRANT select ON customers1 TO bob WITH GRANT OPTION;
GRANT select ON customers1 TO hr_manager(role) WITH GRANT OPTION;

- 兩個受賦予者,都可以把許可權或者role 再賦予other users
- 兩個option 都可以對DBA 和APP ADMIN 管理帶來方便性,但同時,都帶來不安全的因素
不同點:
- with admin option 只能在賦予 system privilege 的時使用
- with grant option 只能在賦予 object privilege 的時使用
- 移除帶有admin option 的system privileges 時,連帶的許可權將保留
例如:
1. DBA 給了CREATE TABLE 系統許可權給JEFF WITH ADMIN OPTION
2. JEFF CREATES TABLE
3. JEFF grants the CREATE TABLE 系統許可權給EMI
4. EMI CREATES A table
5. DBA 撤銷CREATE TABLE 系統許可權從JEFF
結果:
JEFF'S TABLE 依然存在,但不能建立新的TABLE 了
EMI'S TABLE 依然存在,他還保留著CREATE TABLE 系統許可權。
- 移除帶有grant option 的object privileges 時,連帶的許可權也將移除
例如:
1. JEFF 給了SELECT object privileges 在EMP 上 WITH ADMIN OPTION
2. JEFF 給了SELECT 許可權在EMP 上 TO EMI
3. 後來,移除JEFF的SELECT 許可權

Sep 16, 2008

ORA-01036: illegal variable name/number

當使用 controlparamter 時, SQL server 所使用的 為 "@parameter" , 但套用到 Oracle 則會出現 "ORA-01036: illegal variable name/number" 錯誤, 正確使用方法為 ":paramter"
<asp:SqlDataSource ID="SqlDataSource5" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringPROD %>"
ProviderName="System.Data.OracleClient"
SelectCommand="select count(*) as count from approve_v where user_name =:paramuser">
<SelectParameters>
<asp:ControlParameter ControlID="Label1" DefaultValue="" Name="paramuser" PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>

System.Data.OracleClient 需有 Oracle 用戶端軟體版本 8.1.7 或以上版本

System.Data.OracleClient 需有 Oracle 用戶端軟體版本 8.1.7 或以上版本,
原因: Server 上的 Oracle Client 安裝目錄, 需允許 Server 的 "Network Service" 有 Read 的權限, 才可運作.

Sep 9, 2008

Unable to add Trusted Sites in IE 6

無法新增網站到信任網站,出現 "您指定的網站已存在於另一個區域中 請從該區域移除網站", 從IE 界面查看並無此網站, 查 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range1], 確認有此網站IP.
Workaround:
利用修改與新增Registry key方式,將區域網路與信任網站做處理.

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range2]
"http"=dword:00000002
":Range"="10.10.1.2"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range1]
":Range"="10.10.1.3"
"*"=dword:00000002

------------
刪除登錄機碼和登錄值
如果要以 .reg 檔刪除登錄機碼,請在 .reg 檔中的 RegistryPath 之前加上連字號 (-)。例如,如果要刪除下列登錄機碼中的 Test 子機碼:
HKEY_LOCAL_MACHINE\Software
請在 .reg 檔中的下列登錄機碼前面加上連字號:
HKEY_LOCAL_MACHINE\Software\Test
下列範例包含可以執行這項操作的 .reg 檔。
[-HKEY_LOCAL_MACHINE\Software\Test]
如果要以 .reg 檔刪除登錄值,請在 .reg 檔中的 DataItemName 後面的等號之後加上連字號 (-)。例如,如果要刪除下列登錄機碼中的 TestValue 登錄值:
HKEY_LOCAL_MACHINE\Software\Test
請在 .reg 檔中的 "TestValue"= 後加上連字號。下列範例包含可以執行這項操作的 .reg 檔。
HKEY_LOCAL_MACHINE\Software\Test
"TestValue"=-
如果要建立 .reg 檔,請使用 Regedit.exe 匯出您想要刪除的登錄機碼,然後在「記事本」中編輯 .reg 檔並插入連字號。

Sep 3, 2008

讓Office 文件,如 World,Excel 不在IE 視窗內開啟的方式

讓Office 文件,如 World,Excel 不在IE 視窗內開啟的方式.
如果要使用「資料夾選項」工具,設定 Internet Explorer 在適當的 Office 程式中開啟 Office 檔案:
1.開啟 [我的電腦]。
2.在 [工具] 功能表 (或 [檢視] 功能表) 上,按一下 [資料夾選項] (或按一下 [選項])。
3.按一下 [檔案類型] 索引標籤。
4.在 [註冊的檔案類型] 清單中,按一下特定的 Office 文件類型 (例如 Microsoft Excel 工作表),然後按一下 [進階] (或按一下 [編輯])。
5.在 [編輯檔案類型] 對話方塊中,按一下 [在同一個視窗內瀏覽] 以取消選取其核取方塊 (或按一下 [直接開啟網頁文件] 以取消選取其核取方塊)。
6.按一下 [確定]。

Sep 2, 2008

perl 筆記

字串運算子 (比 ASCII表)
. => "my"."doc" = "mydoc" 字串相加
x => "yes"x2 = "yesyes" 複製字串
eq => "my" eg "MY" = false 字串相等
ne => "my" ne "MY" = true 字串不相等
lt => "abc" lt "bc" = true 逐個字元比對兩字串大小,看是否前ㄧ個比後一個小,not equal 時就停止比較,等於就持續往後比較
gt => "abc" gt "bc" = false 逐個字元比對兩字串大小,看是否前ㄧ個比後一個小
cmp => "abc" cmp "bc" = 表較兩個字串,傳回有三種 , 前大於後為 1, 小於為 -1, 等於時為0

處理字串函數
length(字串值) =>傳回整數,空值傳回0

chomp($num)
//chomp 函數去除$num 變數值的最後換行符號 , 回傳值為被刪除的字元個數
chop($num)
//chomp 函數去除$num 變數值的最後ㄧ個字元 , 回傳值為被刪除的字元
$/ => 指定 chomp 要去除的字元, 預設是 "\n" 換行符號

split(/模式/,字串) => @str=split(/&/,"u=brian&password=good") => $str[0]="u=brian" , $str[1]="password=good"
substr(字串,字串起始位置索引值,字串長度)
改變大小寫=> lc , uc , lcfirst, usfirst
index(原字串,要找尋的子字串,偏移量), 若未找到會回傳-1
pack 與 unpack => pack(指定的格式,需解碼的字元) => pack("u","這是測試") , 編碼為 uuencode 格式.


$name=;
// <> 代表從檔案代碼中讀出資料

my($sec,$min,$day,$mon,$year)=@{[localtime(time)]}[0,1,2,3,4,5];
$year +=1900;
$mon +=1;
print "現在時間 $year/$mon/$day $hour:$min:$sec";
//time 函數傳回 從1900 道現在的秒數, localtime 函數轉換為年用日分時秒.$time[6] 代表 星期幾, $time[7] 代表一年的第幾天

//單引號內無變數內插, 雙引號會有變數內插

//perl 內部變數
$_ => 預設變數($ARG), 凡是程式需要純量資料作為輸出而我們沒有提供資料的地方時,perl就會用 $_ 來代替,如 print 就等於 print $_.
$& => 成供比對的字串
$. => 檔案代碼目前讀的行
$$ => 執行該程式的process id
$0 => 所執行的perl程式的檔名
$# => 輸出數值的格式
$] => perl 編譯器的版本
$^0 => Perl 編譯器所處的作業系統名稱
$ARGV => 目前從<>讀取的檔案名稱
@ARGV => 包含指令行輸入的陣列
@_ => 函數的參數陣列
$|=1; => Autoflush STDOUT


${name}s => 此種表示法可把變數取得後加上s 字元

":" 與 "空白" 皆會切割相鄰變數名稱

my $var2=@var1
// $var2 的值為 @var1 陣列的個數

//陣列的索引值是從 0 開始
$#array=99; => 表定義了一個有100的資料欄位的陣列 @array
$#array=-1 => 表刪除整個陣列並釋回佔用的記憶體

$string=shift;
$logfile=pop;
// shift函數 用來把陣列的第一個元素取出 並指定給 $string
// pop 函數用來把最後一個元素取出, 並指定給 $logfile

//倒裝與And 語法:若 if內的結構只有一行敘述
print "這是測試" if($input > 30);

($input > 30) and print "這是測試" ;

// for 與 foreach
@array=(this,is,a,book);
for $item(@array){
print $item,"\n"
}

@array=(this,is,a,book);
foreach $item(@array){
print $item,"\n"
}


常規表示式
=~ => 運算子用於指定要處理的字串純量變數,可和 m// , s// , 與 tr// 搭配使用, 成功傳回 true , != 則與=~ 傳回相反的判斷
m// => 比對函數, m 可以省略, / 可以用任何的符號來取代如 m!!
s// => 搜索字串並取代
$string = "Yes it is"
if($string=~m/YES/){
print "Find yes";
}
else
{
print "No yes";
}

[] => 可用來表示比對其中的任何一個字