2010-11-25 14 views
5

Ben bir microsoft sql server veritabanı ve bir dizi kullanıcı var. Şimdi benim uygulamamda, bazı işlevler sadece kullanıcı belli hakları (admin) ile kullanıcı adı ve şifre girmişse görünür yapmak istiyorum. Veritabanları ve kullanıcı adları ve hakları değişebileceğinden, bir microsoft sql sunucu kullanıcısının sahip olduğu izinleri/hakları nasıl kontrol ederim?microsoft sql server: kullanıcıların kendi izinlerini kontrol et

+0

Açıklayabiliyor musunuz - kullanıcı adınıza/parolanıza bağlı olarak hangi işlevlerin görünmesi gerekir? Kullanıcı adınızı ve şifrenizi veritabanınıza kaydediyor musunuz, yoksa sql server güvenlik klasörü altında bir kullanıcı adı/şifre mi demek istiyorsunuz? Kendi güvenlik seviyenizi veya kullanıcı masanızdaki bir bayrağı özümsemek istediğiniz gibi görünüyor - Kullanıcı {Kullanıcı adı, Şifre, isAdmin}, daha sonra uygulamanızda, giriş yaptıklarında bir yönetici olup olmadığını kontrol edebilir misiniz? Eğer öyleyse, ekstra işlev, eğer değilse, gizleyin. Ayrıca, birçok farklı erişim düzeyiniz varsa, ayrı bir tablo kullanmayı düşünün – Prescott

+0

Hayır ek işlevsellik yok. Basit terimlerle ifade etmek. N kullanıcı grupları olduğunu düşünün. İlk önce sadece sunucuyu sorgulayabilir. İkincisi, ekleme ifadelerini sorgulayabilir ve gerçekleştirebilir. Üçüncüsü de görünümler oluşturabilir ... vb. Aslında sadece mevcut kullanıcının veritabanında ne yapmasına izin verildiğini bilmek istiyorum. –

+0

Btw. Gruplara sabitlenmeyin. Grup halinde organize edilmelerine gerek yoktur. Sadece farklı izinlere sahip birden çok kullanıcı. Sadece mevcut dbuser'ın kullanamayacağı işlevselliği devre dışı bırakmak istiyorum çünkü veritabanında gerekli izin yok. –

cevap

6

Geçerli kullanıcının, belirli izinler üzerinde, tüm güvenlik iznini döndüren [sys.fn_mypermissions][1] kullanarak kontrol edebilirsiniz. Ayrıca HAS_PERMS_BY_NAME ile belirli bir izni kontrol edebilirsiniz. Örneğin.

SELECT HAS_PERMS_BY_NAME(null, null, 'CONTROL SERVER'); 
+0

Teşekkürler, bu kadar. Şimdi, örneğin, kullanıcının belirli bir veritabanında eki varsa, aşağıdakileri kontrol edebilirim: SELECT HAS_PERMS_BY_NAME ('veritabani', 'DATABASE', 'INSERT') AS Expr1. Ayrıca, eklediğiniz dokümantasyon bağlantısına göre diğer izinleri de kontrol edin. –

0

Ben

Seni ilgili uygulama kullanıcılarını ekleyebileceğiniz bir SQL Server veritabanı Rolü oluşturmak öneririm ..... ancak ben yapmak varsayarak senin sorunun tanımını anlaması tamamen emin değilim App (veya bir Windows Domain Group) içinde tutulan bazı grup üyelikleri aracılığıyla olabilir. Grup üyeliğini, bağımsız olarak kullanıcı üyeliğini yönetmek için Rolü kullanarak veritabanında bulunan ilgili izinleri yönetmekten gelen eşlemeyi ayarlamak için kullanabilirsiniz. Bu şekilde, yalnızca bir uygulamanın Kullanıcı'nın SQL Server'ın güvenlik yapılandırmasını sorgulamadan ilgili uygulama veya pencere grubunun üyesi olduğunu kontrol etmeniz gerekir.

+0

Tasarım perspektifinden neden hala "check-in" izinlerine ihtiyacınız olduğunu göremiyorum. İzinler, yerinde doğruladığınız kullanıcı kimlik doğrulamasının onaylandığı uygun Rol'e üyelik aracılığıyla verilir. Gerekli "yönetici" haklarına sahip bir Rol ve gerekli kullanıcı haklarına sahip bir Rol oluşturmalısınız. Ardından kullanıcıları ilgili rollere ekleyin/eşleyin. Daha sonra, kullanıcının doğru kimlik bilgileriyle oturum açabileceği gerçeği bu amaca hizmet ettiğinden, izinleri/onaylamaları gerekmez. –

0

IS_MEMBER fonksiyonunu kullanıyor Bunu yapmanın en kolay yolu, kullanıcı rolü/grup Db_owner içindedir Hava kontrol eder: Eğer kaydedilir bir yönetici ima CONTROL SERVER izni için kontrol edebilirsiniz. Fonksiyon, veritabanı seviyesinde bir kontrol gerçekleştirir. Sunucu leve adresinde kontrol etmeniz gerekiyorsa, IS_SRVROLEMEMBER işlevini kullanabilirsiniz. Her ikisi de sql server 2005'ten beri kullanılabilir.