Sybase

需要在 sybase ase 中創建新登錄名的腳本

  • June 21, 2017

我在 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 中的錯誤 …

完畢

引用自:https://dba.stackexchange.com/questions/176877