Forum

sql user & pass...
 
Bildirimler
Hepsini Temizle

sql user & password listesi ve otomatik uyarılar hakkında

7 Yazılar
2 Üyeler
0 Likes
814 Görüntüleme
(@ahmetyuruk)
Gönderiler: 115
Estimable Member
Konu başlatıcı
 

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... 

 

 
Gönderildi : 27/06/2013 14:01

(@kenanilgun)
Gönderiler: 544
Üye
 

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 

 
Gönderildi : 27/06/2013 17:43

(@kenanilgun)
Gönderiler: 544
Üye
 
1.
 
DECLARE @DB_USers TABLE
(DBName sysname, UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime)
 
INSERT @DB_USers
EXEC sp_MSforeachdb
 
'
use [?]
SELECT ''?'' AS DB_Name,
case prin.name when ''dbo'' then prin.name + '' (''+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName,
prin.type_desc AS LoginType,
isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,create_date,modify_date
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%'''
 
SELECT
 
dbname,username ,logintype ,create_date ,modify_date ,
 
STUFF(
 
(
 
SELECT ',' + CONVERT(VARCHAR(500),associatedrole)
 
FROM @DB_USers user2
 
WHERE
 
user1.DBName=user2.DBName AND user1.UserName=user2.UserName
 
FOR XML PATH('')
 
)
 
,1,1,'') AS Permissions_user
 
FROM @DB_USers user1
 
GROUP BY
 
dbname,username ,logintype ,create_date ,modify_date
 
ORDER BY DBName,username
 
Gönderildi : 27/06/2013 17:57

(@kenanilgun)
Gönderiler: 544
Üye
 

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  

 
Gönderildi : 27/06/2013 18:02

(@kenanilgun)
Gönderiler: 544
Üye
 

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; 

 
Gönderildi : 27/06/2013 18:37

(@kenanilgun)
Gönderiler: 544
Üye
 

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. 

 
Gönderildi : 27/06/2013 19:55

(@ahmetyuruk)
Gönderiler: 115
Estimable Member
Konu başlatıcı
 

Kenan bey selam , 

Yardımlarınız için teşekkürler.. Bahsettiğiniz adımları teker teker deneyeceğim. 

 
Gönderildi : 28/06/2013 17:23

Paylaş: