需要在 sybase ase 中創建新登錄名的腳本
我在 SYBASE ASE 中有 470 個新數據庫帳戶
我當然不想手動操作,因為它肯定很耗時。
在這裡,我有舊腳本,我嘗試添加登錄名
有人可以幫助我以另一種方式編寫此腳本嗎?
此文件中存在的數據將如下所示/tmp/addthese.txt:
i111111 i222222 i333333 i444444 i555555 i666666 i777777 i888888 i999999
腳本:源 /cis1/sybase/SYBASE.sh
set passs=`cat /cis1/prod/dba/input/. ----` isql -Usa -SPDSQTS1 <<EO_SQL $passs declare a varchar(10) declare n int declare count int declare Iuser varchar(10) declare date varchar(20) declare id int count=1 while n<427 a=sed -n 'count{p;q;}' "/tmp/addthese.txt" select Iuser=name from syslogins where name='a' if [Iuser!=a] sp_addlogin a,Sybase123 go use qts_db go sp_adduser a,a,eng go use engcomdb go sp_adduser a,a,eng go use sybasedb go sp_adduser a,a,eng go use engdb go sp_adduser a,a,eng go use msgdb go sp_adduser a,a,eng go use master go sp_modifylogin 'a',"authenticate with","ldap" go select id=suid from syslogins where name='a' select date=crdate from syslogins where name='a' use qts_db go insert into dbo.profiles(login_name,userid,security_level,delta_ts,delta_sy_user) values ('a',id,'ADMIN','date',id) go insert into dbo.users(userid,site_id,delta_sy_user,delta_ts,email,displayname,lastname,firstname) values(id,'SYBASE',10407,'date','a',', : id','', '') go end count=count+1 end
有很多很多方法可以處理向 Sybase ASE 添加登錄/使用者列表,所有這些都包括 (Unix/Linux) shell 腳本和 T-SQL 編碼的混合。
一個簡單的例子:
set passs=`cat /cis1/prod/dba/input/. ----` cat addthese.txt | while read newlogin do isql -Usa -SPDSQTS1 <<EO_SQL > /tmp/error.out 2>&1 $passs use master go if suser_id("${newlogin}") is NULL exec sp_addlogin ${newlogin},Sybase123 go ---------------------- -- repeat following block for each db of interest (eg, qts_db, engcomdb) use <db> go if user_id("${newlogin}") is NULL exec sp_adduser ${newlogin}, ${newlogin}, eng go --------------------- -- rest of your coding go EO_SQL ... check for errors in /tmp/error.out ... done
您可以將以上所有內容放入 shell 腳本中,確保 addthese.txt 正確/最新,然後執行 shell 腳本。
上述變化可能包括:
- 將 T-SQL 程式碼放入儲存過程中,然後為每個新登錄呼叫儲存過程
- 將上面的 T-SQL 程式碼放在 template.sql 文件中並
NEWLOGIN
用作佔位符,然後執行一個 shell 腳本,sed 's/NEWLOGIN/${newlogin}/g' template.sql > runme.sql
然後isql -i runme.sql > error.out 2>&1
根據您使用的 shell 和您的編碼風格/偏好,有許多變化。
源 /cis1/sybase/SYBASE.sh 設置 pass=
cat /cis1/prod/dba/input/. ----
cat addthese.txt | 在讀取 newlogin 時執行 isql -Usa -SPDSQTS1 < /tmp/error.out 2>&1 $ passs use master go if suser_id(" $ {newlogin} “) 為 NULL exec sp_addlogin $ {newlogin}, Sybase123
走
– 對每個感興趣的 db(例如,qts_db、engcomdb)重複以下塊使用 qts_db go if user_id(” $ {newlogin}") is NULL exec sp_adduser $ {newlogin}, ${newlogin}, 英語
如果 user_id(" $ {newlogin}") is NULL exec sp_adduser $ {newlogin}, ${newlogin}, 英語
如果 user_id(" $ {newlogin}") is NULL exec sp_adduser $ {newlogin}, ${newlogin}, 英語
如果 user_id(" $ {newlogin}") is NULL exec sp_adduser $ {newlogin}, ${newlogin}, 英語
如果 user_id(" $ {newlogin}") is NULL exec sp_adduser $ {newlogin}, ${newlogin}, 英語
使用 master go sp_modifylogin ${newlogin},“authenticate with”,“ldap” go
從 syslogins 中選擇 id=suid,其中 name= $ {newlogin} select date=crdate from syslogins where name= $ {新登錄}
使用 qts_db 去
插入 dbo.profiles(login_name,userid,security_level,delta_ts,delta_sy_user) 值 (${newlogin},id,‘ADMIN’,‘date’,id) 去
插入 dbo.users(userid,site_id,delta_sy_user,delta_ts,email,displayname,lastname,firstname) values(id,‘SYBASE’,10407,‘date’,${newlogin},’, : id’,’’, ‘’) 走
EO_SQL
… 檢查 /tmp/error.out 中的錯誤 …
完畢