Uygulama rolleri Access projelerini ve SQL Server 2000 Desktop Edition ile nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 308312 - Bu makalenin geçerli olduğu ürünleri görün.
Gelişmiş: Uzman kodlama, birlikte çalışabilirlik ve çok kullanıcılı becerileri gerektirir.

Bu makalede, yalnızca bir Microsoft Access projesine (.adp) uygulanır.

Bu makalenin Microsoft Access 2000 sürümü için bkz: 318816.
Hepsini aç | Hepsini kapa

Özet

Bu makalede, Microsoft SQL Server uygulama rolleri bir Microsoft Access projesi (ADP) kullanmak için geçici çözümler yetenekleri ve sınırlamaları açıklanmaktadır.

Daha fazla bilgi

SQL Server'da veritabanı rolleri daha kolay yönetim izinleri veritabanında oluşturabilirsiniz. Tek tek izinler her kullanıcı için ayrı vermek yerine, bunları aynı normal veritabanı rolünün üyeleri yapıp sonra da veritabanı rolüne izinleri atama aynı izin gereksinimleri olan kullanıcıların gruplandırabilirsiniz. Belirli bir izin açıkça başka bir yerde engellendi sürece, üye kullanıcıların veritabanı bu role verilmiş izinlere kazanacağı.

Normal bir veritabanı rollerine kendi ad hoc sorguları veya bir veritabanı için güncelleştirmeler gerçekleştirmek kullanıcıların istediğiniz durumlar için çok yararlı olmasına karşın, bunlar her zaman uygun değil. Bazen, kullanıcıların yalnızca belirli bir uygulama kullanıyor olmaları ve uygulama dışındaki verileri görüntülemek veya değiştirmek istediğiniz bazı izinleri olması isteyebilirsiniz.

Yalnızca bir SQL Server kullanıcı hesabı için gerekli izinleri vermek için bu geçici için kullanılan bir yöntem var. Gerçek kullanıcılar, bir veritabanına bağlanmak için ancak değil görmek ya da tüm verileri değiştirmek için gerekli izinlere sahip. Bir kullanıcı, tek tek kullanıcı hesabıyla veritabanına bağlandıktan sonra ADP sonra program aracılığıyla izinlerine sahip kullanıcı hesabının kimlik bilgilerini kullanarak yeniden. Bu etkin olabilir, ancak bu veritabanındaki kullanıcılar arasında ayrım yapmak için veya bir kullanıcı belirli bir gerçekleştirilecek belirlemek için izin vermiyor.

Uygulama rolleri Bu kısıtlamaya bir geçici çözüm bulmak için tasarlanmıştır. Normal bir veritabanı rollerini, farklı olarak, uygulama rolleri üyeleri kendilerini yetkiniz yok. Bunun yerine, kullanıcılar, bir SQL Server'da oturum açmak ve kendi kimlik bilgilerini kullanarak bir veritabanına bağlanabilir. Bu noktada, bir uygulama rolünün güvenlik bağlamını programsal olarak varolan bir bağlantıyı sp_setapprole saklı yordamını kullanarak uygulanabilir. SQL Server'da, tek tek kullanıcılar hala olarak tanır, ancak belirli bir bağlantı içinde kullanılabilen izinleri uygulama rolünün izinlerde sınırlıdır. Kullanıcının tek tek izinleri olup olmadığını, daha az ya da daha yeni artık kabul edilir.

Bir uygulama rol oluşturma

Microsoft Access projeleri tüm görsel tasarım araçları, SQL Server güvenlik nesneleri gibi uygulama rolleri oluşturma hakkınız yok. Microsoft SQL Server veya Microsoft Office XP Developer normal sürümüyle uygulama rolünü oluşturma ve bu izinleri atamak için bulunan istemci araçları kullanmanızı önerir. Ancak, oluşturabileceğiniz hala uygulama rolünü ve, gerekli izinlere program aracılığıyla gelen bir ADP Transact-SQL (T-SQL) kullanarak verin. SQL Server güvenliği, tam bir tartışmayı ek bu makalenin kapsamı dışındadır olsa da bilgi SQL Server çevrimiçi bulunabilir aşağıdaki adımları program aracılığıyla bir uygulama rol oluşturmak ve yeni rolün tablo Seç izinleri vermek nasıl göster:
  1. Access'i başlatın.
  2. Northwind örnek Access projesi açın.
  3. Veritabanı penceresinde, nesneleri altında modüller ' i tıklatın ve sonra Visual Basic ortamında yeni bir modül açmak için Yeni ' yi tıklatın.

    Not Access 2007'de, Modül <a0>Oluştur</a0> sekmesindeki diğer grubu tıklatın.
  4. Yeni modüle aşağıdaki kodu yapıştırın veya yazın:
    Public Function AddNewAppRole(RoleName As String, PW As String) As Boolean
    On Error GoTo EH:
    If CurrentProject.IsConnected Then
    Dim sTSQL As String
        'Create the command
    sTSQL = "EXEC sp_addapprole '" & RoleName & "','" & PW & "'"
        'Send the command
    Application.CurrentProject.Connection.Execute sTSQL
    AddNewAppRole = True
    Else
    AddNewAppRole = False
    End If
    Exit Function
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    AddNewAppRole = False
    End Function
    					
  5. Modülü kaydetmek ve sonra Visual Basic ortamını çıkın.
  6. Müşteriler tablosunda bir kopyasını oluşturun ve tNewTable kaydedin. Bunu yapmak için şu adımları izleyin:
    1. Veritabanı penceresinde, Customers tablosunu sağ tıklatın ve sonra kısayol menüsünden Farklı Kaydet'i tıklatın.

      Not Access 2007'de, Müşteriler tablosunda Gezinti Bölmesi'ni tıklatın, Microsoft Office düğmesi ' ni tıklatın, Kaydet öğesinin üzerine gelin ve sonra Nesne Kaydet ' i tıklatın.
    2. Farklı Kaydet iletişim kutusunda, kayıt <a1>Tablo</a1> 'Customers' Kime kutusunda tNewTable yazın ve Tamam ' ı tıklatın.
  7. Veritabanı penceresinde, nesneleri altında Formlar ' ı tıklatın, Yeni'yi tıklatın ve yeni bir form Tasarım görünümünde açmak için Tamam ' ı tıklatın.

    Not Access 2007'de <a0>Oluştur</a0> sekmesindeki <a1>Formlar</a1> grubundaki Form tasarımı tıklatın.
  8. Bir komut düğmesini, yeni forma ekleyin.
  9. Yeni bir komut düğmesi için OnClick özelliği, olay yordamını ayarlayın:
    On Error GoTo EH:
    'Code only works if ADP is connected.
    If CurrentProject.IsConnected Then
        Dim bNewAppRole As Boolean, strTSQL As String
        Dim strRoleName As String, strPW As String
        strRoleName = "AppRoleName"
        strPW = "Password"
        'Call function to create app role.
        bNewAppRole = AddNewAppRole(strRoleName, strPW)
        'Test to see if it failed.
        If bNewAppRole = False Then
            Exit Sub
        End If
        MsgBox "New Application role '" & strRoleName & "' created", vbInformation
        'Create command to grant permissions.
        strTSQL = "Grant Select on tNewTable to " & strRoleName
        'Send the command.
        Application.CurrentProject.Connection.Execute strTSQL
        MsgBox "Select permissions granted on tNewTable for " & strRoleName
    Else
    MsgBox "ADP must be connected to SQL Server"
    End If
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    					
  10. Forma dönmek için Visual Basic ortamını kapatın.
  11. Formu kaydedin ve sonra da formu formu görüntülemek için geçiş yapın.
  12. Temel kod çalıştırmak için komut düğmesini tıklatın.

    Başarı belirtmek için iki ileti kutusu aldığınız dikkat edin. Bir uygulama rol oluşturulur ve sonra yeni rolün izinlerde tNewTable ikincisi izni sonra alıyorsunuz.

Uygulama rolünü uygulamaya koyma

Ana olası sorun Access projelerinde uygulama rollerini kullanıyorsanız, Access SQL Server'a üç bağlantı çeşitli görevler ele kullanmasıdır. Ideal olarak, tüm proje için bir uygulama rol uygulamak için tüm üç bağlantı bağlamında sp_setapprole yürütmek gerekir. Her bir bağlantı tarafından işlenen nesneleri aşağıdaki gibidir:

  1. Veritabanındaki hangi nesnelerin görüntülenmesini belirlemek için kullanılan pencere ve çeşitli veritabanı yönetim görevleri için.

    Tablo, görünüm, saklı yordamlar, işlevleri ve kayıt kaynaklarını formlar ve alt raporlar için (ancak olmayan ana rapora kendisi için) açmak için kullanılır.

    Birleşik giriş kutuları, liste kutuları ve raporlar için kayıt kaynaklarını almak için kullanılır.
  2. Tablo, görünüm, saklı yordamlar, işlevleri ve kayıt kaynaklarını formlar ve alt raporlar için (ancak olmayan ana rapora kendisi için) açmak için kullanılır.

    Birleşik giriş kutuları, liste kutuları ve raporlar için kayıt kaynaklarını almak için kullanılır.
  3. Birleşik giriş kutuları, liste kutuları ve raporlar için kayıt kaynaklarını almak için kullanılır.

Bağlantıları # 2 ve 3 oldukça kolay erişilebilir, ancak # 1 bağlantı bağlamında saklı yordamı yürütmek için kullanılabilir bir yöntemi yoktur. Neyse ki, bu bağlantıyı üç en az önemli olan ve kolayca geçici veritabanı nesnelerini, yerleşik Veritabanı penceresinde güvenmek yerine işlemek için kendi kullanıcı arabirimi (örneğin, bir geçiş panosu türü formu) oluşturarak çalıştıysa.

Bir uygulama rol bağlantıları # 2 ve 3 karşı uygulama göstermek için Northwind örnek Access projesi aşağıdaki adımları kullanın:

  1. Veritabanı penceresinde, nesneleri altında Formlar ' ı tıklatın, Yeni'yi tıklatın ve yeni bir form Tasarım görünümünde açmak için Tamam ' ı tıklatın.

    Not Access 2007'de <a0>Oluştur</a0> sekmesindeki <a1>Formlar</a1> grubundaki Form tasarımı tıklatın.
  2. Bir liste kutusu, yeni oluşturulan forma ekleyin ve sonra da lst_AppRole için liste kutusunda <a1>Name</a1> özelliğini ayarlayın.
  3. Bir komut düğmesi, forma ekleyin.
  4. Yeni bir komut düğmesi için OnClick özelliği, olay yordamını ayarlayın:
    On Error GoTo EH
        'This avoids a message that no records were returned.
    DoCmd.SetWarnings False
    Dim TSQL
    TSQL = "EXEC sp_setapprole 'AppRoleName', {Encrypt N 'Password'}, 'odbc'"
        'This sets the app role on Connection #2.
    Application.CurrentProject.Connection.Execute TSQL
        'This sets the app role on Connection #3.
    lst_approle.RowSource = TSQL
    lst_approle.Requery
    DoCmd.SetWarnings True
    MsgBox "The application Role is now in effect.", vbInformation
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    					
  5. Forma dönmek için Visual Basic ortamını kapatın.
  6. Formu kaydedin ve sonra da formu formu görüntülemek için geçiş yapın.
  7. Temel kod çalıştırmak için komut düğmesini tıklatın.

    Başarı belirten bir ileti kutusu aldığınız dikkat edin.
  8. Veritabanı penceresinde, nesneleri altında Tablolar ' ı tıklatın ve sonra tNewTable tabloyu açın.

    Not Access 2007'de, Gezinti bölmesinde tNewTable tabloyu çift tıklatın.
  9. Bir kaydı değiştirme ve değişiklikleri yeniden kaydetmeye çalışın.
Değişiklikleriniz kaydedilmeye çalıştığınızda gibi hakkında yeterli izinlere sahip olmayan bir hata iletisi aldığınız dikkat edin. Yeni uygulama rolünü Seç izni tNewTable tablonun verdiği değil çünkü böyle güncelleştirme izni.

Tasarım gereği, Access nesneleri yalnızca, kullanıcı en az bir seçim veya izinleri Yürüt Veritabanı penceresinde görüntüler. Access, <a1>Bağlantı</a1> # 1 hangi nesnelerin kullanıcı izinlerine sahip olup olmadığını belirlemek için kullanır. Uygulama uygulandıktan sonra bağlantıları # 2 ve 3, veritabanı penceresini role karşın, kullanıcı artık tüm nesneler için izinleriniz veya izinleriniz görüntülenmez, daha fazla nesne için daha önce olduğu nesneler aynı görüntülenmeye devam eder. Bu, Veritabanı penceresinde kullandığınızda beklenmedik davranışa neden olabilir.

TNewTable tablo açıldığında, örneğin, "kullanıcı düzenlemek ve kayıtları eklemek için gerekli izinlere sahip olduğunu göründüğü". Ekleme yeni kayıt simgesi tablonun altındaki etkinleştirilir ve kullanıcı kaydını düzenleme moduna olduğu. Aksi halde, düzenleme veya hata iletisine neden ekleme, tamamlamaya çalışın kadar belirtmek için herhangi bir görsel clue görmezsiniz. Erişim, gerçekte aksi halde, izinlere sahip olduğunu anladığı.

En geçerli çözümü kullanıcı için özel bir arabirim sağlamak için Veritabanı penceresinde yararlanmayı ise. Bir geçiş panosu türü kullanıcı arabirimini kullanarak, tam olarak hangi kullanıcının erişimi olan nesneleri de denetleyebilirsiniz.

Diğer sınırlamalara ve güvenlikle ilgili önemli noktalar

Alt formlar çalışmıyor

Farklı olarak, diğer veritabanı nesneleri ile Access her zaman aynı bağlantı alt formun veri kaynağını almak için kullanmaz. Access, genellikle (ancak her zaman değil) yalnızca alt recordset'i tanıtıcı veya alt form ana forma bağlayan bağlantı alanı veri almak için SQL Server'a yeni bir bağlantı oluşturur. Uygulanan uygulama rolünü bu yeni bir bağlantı olmadığından, veritabanı nesnesi için açık izinleriniz varsa, izinler bir hata oluşturulabilir. Ne yazık ki, bu uygulama rolleri uygulandığında, ilişkili bir alt form kullanmak için güvenilir bir yol olduğu anlamına gelir. Geçici çözümü yalnızca etkin alt formlar, programlı olarak işlenen veri işleme ile tamamen ilişkisiz olmaktır. Bu en önemli sınırlaması uygulama rolleri Access'te kullanıldığında.

Raporların çalışmıyor

Bir tablo gibi bir nesne olması veya bir rapor veya alt raporun kayıt kaynağı olarak listelenen bir görünüm adı, Access SQL Server'dan veri almadan önce nesneyi Veritabanı penceresinde listelenip listelenmediğini denetler. Veritabanı penceresinde, uygulama rolünü uygulanmış olan bağlantı kullandığından, alttaki veri kaynağına açık izni olmayan bir hata oluşturulur.

Bu soruna geçici bir çözüm bulmak için <a0></a0>, her zaman Transact-SQL deyimleri kayıt kaynağı olarak formlar ve raporlar için kullanın. Örneğin, yalnızca "ViewName" veya "Exec StoredProcedureName" yerine, yalnızca "StoredProcedureName." yerine "Select * gelen ViewName" kullanın... Bu şekilde, Access, Transact-SQL deyimlerini doğrudan SQL Server'a geçirir ve uygulama rolünün izinlerini temel verileri alır.

The Public veritabanı rolü

Bir uygulama rol, izinler ortak bir veritabanı rolü edinme. NorthwindCS'de varsayılan tarafından public rolünün çoğu nesneler için tam izinlere sahiptir. Bu nedenle, bir uygulama rol genellikle verimsiz olur. TNewTable tablonun "Bir uygulama rol oluşturma" bölümünde oluşturduğunuz zaman, public rolünün tablo için izin verilen ve bu tabloya daha sonra uygulama rolünü güvenlik bağlamı etkilerini gördünüz. Ancak, diğer tablolardaki public rolünün bu nesneleri için izinleri olduğundan uygulama rolünü altında herhangi bir fark göstermeyebilir.

VBA Güvenlik

Uygulama rolünü parolasını katıştırılmış uygulamasına adıyla adlandırılır çünkü bilgili kullanıcı uygulama rolün adını ve parolayı kaynak kodundan okuyun ve sonra başka bir uygulamadan SQL Server'a erişmek için bu bilgileri kullanın gerçekleştirebilir. Bu nedenle, kaynak kodu alanı olmayacak biçimde, bir ADE dosyasına ADP derlemek için iyi bir fikirdir. En azından bir VBA projesi parola zorlar.

Referanslar

Bu makalede bir Microsoft Access 2000 sürümü hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
318816ACC2000: Nasıl uygulama rolleri Access projeleri ve SQL Server 2000 Desktop Engine (MSDE 2000) ile kullanılır
GRANT hakkında daha fazla bilgi için SQL Server Books Online'da bakın. SQL Server Books Online'da aşağıdaki Microsoft Web sitesinden edinilebilir:
http://www.Microsoft.com/SQL/techinfo/productdoc/2000/default.asp

Özellikler

Makale numarası: 308312 - Last Review: 29 Mart 2007 Perşembe - Gözden geçirme: 6.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto KB308312 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:308312

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com