Forum
selam
1 - sql server kullanıcılarını ve girebildiği db leri hangi query ile sorgulayabilirim.
2 - sql 2008 r2 uygulamasında çalışan bir job success olduğunda tanımladığım operatör kullanıcısına mail atması için ayar yaptım fakat gelen giden yok. database mai lkonfigürasyonu yapıldı.
3 - sql kullanıcılarının mevcut şifrelerinin belirli periyotlarda (aylık) otomatik değiştirilmesi gibi bir işlem söz konusu olabilir mi acaba ?
4 - sql server da bazen eğitim versek dahi önüne geçemediğimiz mantıksız ve geniş tarih aralığında rapor sorgulamaları yapan kullanıcılarımız olabiliyor. dolayısıyla sistem o esnada kasabiliyor. işte tam bu noktada sql server in ilgili sistem yöneticisine şu kullanıcı sistemi kasıyor, şu db üzerinde vs.... bilgisini otomatik mail atabilir mi ?
teşekkürler...
Merhaba Ahmet bey,
1.
DECLARE @db_name VARCHAR(200),
@sql_text VARCHAR(max)
SET @sql_text='Create table ##db_name (user_name varchar(max),'
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
OPEN db_cursor
FETCH next FROM db_cursor INTO @db_name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql_text=@sql_text + @db_name + ' varchar(max),'
FETCH next FROM db_cursor INTO @db_name
END
CLOSE db_cursor
SET @sql_text=@sql_text + 'Server_perm varchar(max))'
EXEC (@sql_text)
DEALLOCATE db_cursor
DECLARE @RoleName VARCHAR(50)
DECLARE @UserName VARCHAR(50)
DECLARE @CMD VARCHAR(1000)
CREATE TABLE #permission
(
user_name VARCHAR(50),
databasename VARCHAR(50),
role VARCHAR(50)
)
DECLARE longspcur CURSOR FOR
SELECT name
FROM sys.server_principals
WHERE type IN ( 'S', 'U', 'G' )
AND principal_id > 4
AND name NOT LIKE '##%'
AND name <> 'NT AUTHORITY\SYSTEM'
AND name <> 'ONDEMAND\Administrator'
AND name NOT LIKE 'steel%'
OPEN longspcur
FETCH next FROM longspcur INTO @UserName
WHILE @@FETCH_STATUS = 0
BEGIN
CREATE TABLE #userroles_kk
(
databasename VARCHAR(50),
role VARCHAR(50)
)
CREATE TABLE #rolemember_kk
(
dbrole VARCHAR(100),
membername VARCHAR(100),
membersid VARBINARY(2048)
)
SET @CMD = 'use ? truncate table #RoleMember_kk insert into #RoleMember_kk exec sp_helprolemember insert into #UserRoles_kk (DatabaseName, Role) select db_name(), dbRole from #RoleMember_kk where MemberName = ''' + @UserName + ''''
EXEC Sp_msforeachdb
@CMD
INSERT INTO #permission
SELECT @UserName 'user',
b.name,
u.role
FROM sys.sysdatabases b
LEFT OUTER JOIN #userroles_kk u
ON u.databasename = b.name --and u.Role='db_owner'
ORDER BY 1
DROP TABLE #userroles_kk;
DROP TABLE #rolemember_kk;
FETCH next FROM longspcur INTO @UserName
END
CLOSE longspcur
DEALLOCATE longspcur
TRUNCATE TABLE ##db_name
DECLARE @d1 VARCHAR(max),
@d2 VARCHAR(max),
@d3 VARCHAR(max),
@ss VARCHAR(max)
DECLARE perm_cur CURSOR FOR
SELECT *
FROM #permission
ORDER BY 2 DESC
OPEN perm_cur
FETCH next FROM perm_cur INTO @d1, @d2, @d3
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS(SELECT 1
FROM ##db_name
WHERE user_name = @d1)
BEGIN
SET @ss='insert into ##db_name(user_name) values ('''
+ @d1 + ''')'
EXEC (@ss)
SET @ss='update ##db_name set ' + @d2 + '=''' + @d3
+ ''' where user_name=''' + @d1 + ''''
EXEC (@ss)
END
ELSE
BEGIN
DECLARE @var NVARCHAR(max),
@ParmDefinition NVARCHAR(max),
@var1 NVARCHAR(max)
SET @var = N'select @var1=' + @d2
+ ' from ##db_name where USER_NAME=''' + @d1
+ '''';
SET @ParmDefinition = N'@var1 nvarchar(300) OUTPUT';
EXECUTE Sp_executesql
@var,
@ParmDefinition,
@var1=@var1 output;
SET @var1=Isnull(@var1, ' ')
SET @var= ' update ##db_name set ' + @d2 + '=''' + @var1 + ' '
+ @d3 + ''' where user_name=''' + @d1 + ''' '
EXEC (@var)
END
FETCH next FROM perm_cur INTO @d1, @d2, @d3
END
CLOSE perm_cur
DEALLOCATE perm_cur
SELECT *
FROM ##db_name
DROP TABLE ##db_name
DROP TABLE #permission
Ahmet bey 2.nci sorunuz için aşağıdaki makaleyi inceyebilirsiniz.
http://www.cozumpark.com/blogs/sql/archive/2008/04/02/sql-server-2005-database-mail-zelli-i.aspx
3. SQL Kullanıcıların özelliklerinde eğer ki "Enforce password policy" seçeneği işaretli değil ise işletim sistemine ait Password Policy ayarlarında bulunan değişikliğe göre şifre yenileme işlemi gerçekleşmektedir.
Eğer ki ben bunu kendim kontrol edeceğim diyorsanız.
Bu komutla tüm kullanıcıların detaylarını görebilirsiniz.
SELECT * FROM sys.sql_logins
Bu komut ilede kullanıcının şifresini değiştirmek mecburiyeti ile must_change değerini vererek sql procedure oluşturabilirsiniz.
ALTER LOGIN kenan WITH
PASSWORD = '123465'
MUST_CHANGE,
CHECK_POLICY = ON,
CHECK_EXPIRATION = ON;
4.
SQL Server Profiler kullanarak bu işleminizi gerçekleştirebilirsiniz. Yeni bir Trace oluşturduğunuzda trace özelliklerinde save to table veya file olarak kayıt edip zaman zaman kontrol sağlıyabilirsiniz veya tablo üzerinde trace bilgilerinizi tutup job yardımı ilede duration değerine göre kayıtları bularak mail atabilirsiniz.
İyi çalışmalar.
Kenan bey selam ,
Yardımlarınız için teşekkürler.. Bahsettiğiniz adımları teker teker deneyeceğim.