SQL login name rename

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Murats
Üye
Mesajlar: 33
Kayıt: 02 Nis 2007 12:20
Konum: Kocaeli Gebze

SQL login name rename

Mesaj gönderen Murats »

SQL uzerinde yaklaşık olarak 15 kullanıcım var viewleri kullanırken kullanıcı adlarinda olan '.' (nokta) karakteri hataya neden oluyor.

Bu nedenle kullanıcıların login name lerini değiştirmek istiyorum.

Bununla ilgili yardimci olursanız sevinirm.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Benim önerim;

- "select * from DBAdi.KullaniciAdi.TabloAdi" şeklindeki sorgular "select * from [DBAdi].[KullaniciAdi].[TabloAdi]" biçiminde kullanarak köşeli parantez içinde kullanarak özel karakter sorununu halletmek olacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Murats
Üye
Mesajlar: 33
Kayıt: 02 Nis 2007 12:20
Konum: Kocaeli Gebze

Mesaj gönderen Murats »

Evet ama DB uzerine direk mudahale yetkim yok o nedenle kullanıcıların isimlerini değiştirmeyi düşünüyorum.

butun kullanıcılari silip yeniden otomasyon uzerinden yetki dağıtmak oldukça uğraştiri olacaktir benım için.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Denemedim ama kodda hata yok gibi.

Kod: Tümünü seç

Ex. usp_RenameLogin 'Test', 'TestLogin' 

---Code should be put in master database ---

CREATE PROCEDURE usp_RenameLogin 

@CurrentLogin sysname,
@NewLogin sysname 

AS 

DECLARE @SQLState AS VARCHAR(200) 

--Configure server to allow ad hoc updat -- es to system tables

EXEC master.dbo.sp_configure 'allow updates', '1'
RECONFIGURE WITH OVERRIDE 

--Update user login name in master db
-- >
SET @SQLState = 'UPDATE master.dbo.sysxlogins SET [name] = ''' + @NewLogin + ''' WHERE [name] = ''' + @CurrentLogin + ''''
EXEC (@SQLState) 

--Update user login name in each db wher -- e has access as in in sysusers table
-- 
SET @SQLState = 'EXEC master.dbo.sp_MSForEachDB ''UPDATE ?.dbo.sysusers SET [name] = ''''' + @NewLogin + ''''' where [name] = ''''' + @CurrentLogin + ''''''''
EXEC (@SQLState) 

--Configure server to disallow ad hoc
-- >--updates to system tables

EXEC master.dbo.sp_configure 'allow updates', '0'
RECONFIGURE WITH OVERRIDE
GO
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Murats yazdı:Evet ama DB uzerine direk mudahale yetkim yok o nedenle kullanıcıların isimlerini değiştirmeyi düşünüyorum...
Bu view'ları yazdığı program tarafından çekmiyor musun? Alt tarafı ADOQuery sorgusu olarak
select * from [Kullaanici.Adi].[viewadi]
yazmak o kadar. DB içinde yazılmış kodlamalarda sıkıntı yaşıyorsan o başka tabi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Murats
Üye
Mesajlar: 33
Kayıt: 02 Nis 2007 12:20
Konum: Kocaeli Gebze

Mesaj gönderen Murats »

aşağıdaki çalıştırdım ama hata aldım.

Kod: Tümünü seç

Ex. usp_RenameLogin 'deneme', 'denemelogin'

---Code should be put in master database ---

CREATE PROCEDURE usp_RenameLogin

@CurrentLogin sysname,
@NewLogin sysname

AS

DECLARE @SQLState AS VARCHAR(200)

--Configure server to allow ad hoc updat -- es to system tables

EXEC master.dbo.sp_configure 'allow updates', '1'
RECONFIGURE WITH OVERRIDE

--Update user login name in master db
-- >
SET @SQLState = 'UPDATE master.dbo.sysxlogins SET [name] = ''' + @NewLogin + ''' WHERE [name] = ''' + @CurrentLogin + ''''
EXEC (@SQLState)

--Update user login name in each db wher -- e has access as in in sysusers table
-- 
SET @SQLState = 'EXEC master.dbo.sp_MSForEachDB ''UPDATE ?.dbo.sysusers SET [name] = ''''' + @NewLogin + ''''' where [name] = ''''' + @CurrentLogin + ''''''''
EXEC (@SQLState)

--Configure server to disallow ad hoc
-- >--updates to system tables

EXEC master.dbo.sp_configure 'allow updates', '0'
RECONFIGURE WITH OVERRIDE
GO

Hata :

Kod: Tümünü seç

Server: Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'PROCEDURE'.
Server: Msg 137, Level 15, State 1, Line 21
Must declare the variable '@NewLogin'.
Server: Msg 137, Level 15, State 1, Line 26
Must declare the variable '@NewLogin'.
Yazmayi unutmusum SQL 2000 versiyonum.
Murats
Üye
Mesajlar: 33
Kayıt: 02 Nis 2007 12:20
Konum: Kocaeli Gebze

Mesaj gönderen Murats »

sabanakman yazdı:
Murats yazdı:Evet ama DB uzerine direk mudahale yetkim yok o nedenle kullanıcıların isimlerini değiştirmeyi düşünüyorum...
Bu view'ları yazdığı program tarafından çekmiyor musun? Alt tarafı ADOQuery sorgusu olarak
select * from [Kullaanici.Adi].[viewadi]
yazmak o kadar. DB içinde yazılmış kodlamalarda sıkıntı yaşıyorsan o başka tabi.
Hayır sorun o değil bir işlem yaparken hata veriyor.

DB yi tanımadığım için nereyi kullanıyor neden hata veriyor hangi table hangi view ile baglı bilmediğim için bulmak oldukça zor.

yaklaşık 7000 kusur adet view var. 2000 kadar da table hangisi olduğunu benim bulmam çok zor.

Programı yazan kişi ile görüşmek lazım ki onlarda kullanıcılarinizi yeniden oluşturun diyorlar.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Prosedürü create ederken mi aldın , Çalıştırken mi.
Master dbsi üzerinde Prosedürü create edip çalıştırıcaksınız.
Ben 2005 vers. denedim prosedürü create edildi.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Murats
Üye
Mesajlar: 33
Kayıt: 02 Nis 2007 12:20
Konum: Kocaeli Gebze

Mesaj gönderen Murats »

Sanırım ben kodu yanlış çalıştırıyorum.

Hepsini birden çalıştırmam problem yaratir mi yoksa parça parça mı çalıştırmak gerekiyor ?=
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Murats yazdı:Sanırım ben kodu yanlış çalıştırıyorum.

Hepsini birden çalıştırmam problem yaratir mi yoksa parça parça mı çalıştırmak gerekiyor ?=
ilk olarak bunu çalıştır ve prosedürü create et.

Kod: Tümünü seç

CREATE PROCEDURE usp_RenameLogin 

@CurrentLogin sysname, 
@NewLogin sysname 

AS 

DECLARE @SQLState AS VARCHAR(200) 

--Configure server to allow ad hoc updat -- es to system tables 

EXEC master.dbo.sp_configure 'allow updates', '1' 
RECONFIGURE WITH OVERRIDE 

--Update user login name in master db 
-- > 
SET @SQLState = 'UPDATE master.dbo.sysxlogins SET [name] = ''' + @NewLogin + ''' WHERE [name] = ''' + @CurrentLogin + '''' 
EXEC (@SQLState) 

--Update user login name in each db wher -- e has access as in in sysusers table 
-- 
SET @SQLState = 'EXEC master.dbo.sp_MSForEachDB ''UPDATE ?.dbo.sysusers SET [name] = ''''' + @NewLogin + ''''' where [name] = ''''' + @CurrentLogin + '''''''' 
EXEC (@SQLState) 

--Configure server to disallow ad hoc 
-- >--updates to system tables 

EXEC master.dbo.sp_configure 'allow updates', '0' 
RECONFIGURE WITH OVERRIDE 
GO
Daha sonra,

Kod: Tümünü seç

Ex. usp_RenameLogin 'Test', 'TestLogin' 
Buradaki "Test" ve "Testlogin" isimleri eski isim ve olması gereken olarak değiştirerek çalıştır.
Denemediğim için YEDEK almanı öneririm..
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

benim anlamadığım master vt sini enterprise manager ile değiştirsek olmazmı. sonuçta bunun kendiside bir veritabanı yani.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Murats
Üye
Mesajlar: 33
Kayıt: 02 Nis 2007 12:20
Konum: Kocaeli Gebze

Mesaj gönderen Murats »

ilk olarak bunu çalıştır ve prosedürü create et.

Kod: Tümünü seç

CREATE PROCEDURE usp_RenameLogin 

@CurrentLogin sysname, 
@NewLogin sysname 

AS 

DECLARE @SQLState AS VARCHAR(200) 

--Configure server to allow ad hoc updat -- es to system tables 

EXEC master.dbo.sp_configure 'allow updates', '1' 
RECONFIGURE WITH OVERRIDE 

--Update user login name in master db 
-- > 
SET @SQLState = 'UPDATE master.dbo.sysxlogins SET [name] = ''' + @NewLogin + ''' WHERE [name] = ''' + @CurrentLogin + '''' 
EXEC (@SQLState) 

--Update user login name in each db wher -- e has access as in in sysusers table 
-- 
SET @SQLState = 'EXEC master.dbo.sp_MSForEachDB ''UPDATE ?.dbo.sysusers SET [name] = ''''' + @NewLogin + ''''' where [name] = ''''' + @CurrentLogin + '''''''' 
EXEC (@SQLState) 

--Configure server to disallow ad hoc 
-- >--updates to system tables 

EXEC master.dbo.sp_configure 'allow updates', '0' 
RECONFIGURE WITH OVERRIDE 
GO
Daha sonra,

Kod: Tümünü seç

Ex. usp_RenameLogin 'Test', 'TestLogin' 
Buradaki "Test" ve "Testlogin" isimleri eski isim ve olması gereken olarak değiştirerek çalıştır.
Denemediğim için YEDEK almanı öneririm..[/quote]


İlk kodu hatasiz olarak çalıştırdım.

Akabinde ise diğer kodu çalıştırmak istediğimde aşağıdaki hatayi aldım.

Kod: Tümünü seç

Server: Msg 2812, Level 16, State 62, Line 1
Could not find stored procedure 'Ex.usp_RenameLogin'.
Kodlari master db uzerinde çalıştırdım.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Kod: Tümünü seç

Ex. usp_RenameLogin 'Test', 'TestLogin' 

Kod: Tümünü seç

Exec usp_RenameLogin 'Test', 'TestLogin' 
olacaktı
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Murats
Üye
Mesajlar: 33
Kayıt: 02 Nis 2007 12:20
Konum: Kocaeli Gebze

Mesaj gönderen Murats »

conari yazdı:

Kod: Tümünü seç

Ex. usp_RenameLogin 'Test', 'TestLogin' 

Kod: Tümünü seç

Exec usp_RenameLogin 'Test', 'TestLogin' 
olacaktı
Abi valla kusura bakmayın ben o kadar uzman değilim ondan anlamıyorum.

Neyse hemen test edelim.

İşte sonuc hesap adi değişti süper bir durum.

sonuc olarak aşağıdakileri dedi local de deniyordum. Henuz asıl alana uygulamadım.

Kod: Tümünü seç

Configuration option 'allow updates' changed from 0 to 1. Run the RECONFIGURE statement to install.

(1 row(s) affected)

Configuration option 'allow updates' changed from 1 to 0. Run the RECONFIGURE statement to install.
Cevapla