Bagaimana menggunakan aplikasi peran dengan proyek-proyek Access dan SQL Server 2000 Desktop Edition

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 308312 - Melihat produk di mana artikel ini berlaku.
Lanjutan: Memerlukan ahli coding, interoperabilitas, dan multiuser keterampilan.

Artikel ini hanya berlaku untuk proyek Microsoft Access (.adp).

Untuk versi Microsoft Access 2000 artikel ini, Lihat 318816.
Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menjelaskan kemampuan, keterbatasan, dan workarounds untuk menggunakan Microsoft SQL Server aplikasi peran dalam Microsoft Access proyek (ADP).

INFORMASI LEBIH LANJUT

Dalam SQL Server, Anda dapat membuat peran database untuk lebih mudah Administrasi perizinan dalam database. Alih-alih memberikan individu izin untuk setiap pengguna secara terpisah, Anda dapat mengelompokkan pengguna yang sama izin kebutuhan dengan membuat mereka anggota peran biasa database yang sama, dan kemudian menetapkan izin peran database itu sendiri. Kecuali tertentu izin secara eksplisit menyangkal di tempat lain, anggota pengguna akan mendapatkan izin diberikan untuk peran database.

Sementara biasa database peran sangat berguna untuk situasi di mana Anda ingin pengguna dapat melakukan ad hoc pertanyaan atau update ke database mereka sendiri, mereka tidak selalu sesuai. Kadang-kadang, Anda mungkin ingin pengguna hanya untuk memiliki izin tertentu ketika mereka menggunakan aplikasi tertentu, dan Anda tidak ingin untuk dapat melihat atau mengubah data di luar aplikasi.

Salah satu metode yang sering digunakan untuk bekerja di sekitar ini adalah untuk hanya memberikan izin yang diperlukan untuk satu SQL Server account pengguna. Pengguna aktual mungkin memiliki izin untuk menghubungkan ke database tapi tidak untuk melihat atau memodifikasi data. Setelah menghubungkan pengguna untuk database menggunakan account pengguna individu, ADP bisa kemudian pemrograman menyambung menggunakan kredensial account pengguna yang tidak memiliki izin. Sementara ini bisa efektif, tidak memungkinkan Anda untuk membedakan antara pengguna dalam database atau untuk menentukan pengguna yang dilakukan tindakan tertentu.

Peran aplikasi yang dirancang untuk bekerja di sekitar pembatasan ini. Peran aplikasi, tidak seperti biasa database peran, tidak memiliki anggota sendiri. Sebaliknya, pengguna log on ke SQL Server dan terhubung ke database menggunakan kredensial mereka sendiri. Pada saat itu, keamanan konteks peran aplikasi dapat diterapkan secara pemrograman untuk sambungan oleh menggunakan sp_setapprole prosedur yang tersimpan. Dalam SQL Server, masing-masing pengguna yang masih dibedakan tetapi izin yang tersedia dalam tertentu sambungan terbatas izin peran aplikasi. Pengguna individu perizinan, apakah kecil atau besar, tidak lagi dianggap.

Membuat peran aplikasi

Microsoft Access proyek tidak memiliki apapun desain visual alat untuk menciptakan SQL Server Security objek seperti peran aplikasi. Microsoft menganjurkan agar Anda menggunakan alat-alat klien yang disertakan dengan Versi biasa SQL Server atau Microsoft Office XP pengembang untuk menciptakan aplikasi peran dan menetapkan izin. Namun, Anda masih dapat membuat peran aplikasi dan memberikan izin yang diperlukan pemrograman oleh menggunakan Transact-SQL (T-SQL) dari ADP. Walaupun diskusi penuh SQL Keamanan server adalah di luar cakupan artikel ini, informasi tambahan dapat ditemukan di SQL Server buku secara Online Langkah-langkah berikut menunjukkan Anda bagaimana untuk membuat pemrograman aplikasi peran dan grant peran baru Pilih hak akses pada tabel:
  1. Mulai akses.
  2. Buka akses sampel Northwind proyek.
  3. Di jendela Database, klik Modul di bawah Objek, lalu klik Baru untuk membuka modul baru di lingkungan Visual Basic.

    Catatan Di Access 2007, klik Modul dalam Lainnya kelompok pada Buat tab.
  4. Ketik atau tempel kode berikut dalam modul baru:
    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. Simpan modul, dan kemudian keluar Visual Basic Lingkungan.
  6. Membuat salinan Pelanggan meja, dan kemudian menyimpannya sebagai tNewTable. Untuk melakukannya, ikuti langkah-langkah berikut:
    1. Di jendela Database, klik kanan Pelanggan meja, dan kemudian klik Simpan sebagai pada menu jalan pintas.

      Catatan Di Access 2007, klik Pelanggan Tabel di panel navigasi, klik Microsoft Office tombol, arahkan ke Simpan sebagai, lalu klik Menyimpan objek sebagai.
    2. Dalam Simpan sebagai kotak dialog, jenis tNewTable dalam Menyimpan tabel 'Pelanggan' ke kotak, dan kemudian klik Oke.
  7. Di jendela Database, klik Bentuk di bawah Objek, klik Baru, lalu klik Oke untuk membuka formulir baru dalam Design view.

    Catatan Di Access 2007, klik Rancangan Borang dalam Bentuk kelompok pada Buat tab.
  8. Tambahkan tombol perintah untuk bentuk baru.
  9. Menetapkan OnClick properti tombol perintah baru untuk acara berikut prosedur:
    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. Menutup lingkungan Visual Basic untuk kembali ke bentuk.
  11. Menyimpan formulir, dan kemudian beralih formulir Bentuk Lihat.
  12. Klik tombol perintah untuk menjalankan kode yang mendasari.

    Pemberitahuan bahwa Anda menerima dua kotak pesan untuk menunjukkan keberhasilan. Anda menerima salah satu setelah peran aplikasi dibuat, dan yang kedua setelah peran baru izin untuk tNewTable diberikan.

Menerapkan peran aplikasi

Komplikasi utama bila Anda menggunakan aplikasi peran dalam Proyek-proyek akses adalah bahwa akses menggunakan tiga koneksi ke SQL Server untuk menangani berbagai tugas. Idealnya, untuk menerapkan peran aplikasi untuk seluruh proyek, Anda harus melaksanakan sp_setapprole dalam konteks semua tiga sambungan. Benda-benda yang ditangani oleh setiap sambungan adalah sebagai berikut:

  1. Digunakan untuk menentukan objek yang muncul dalam Database jendela dan untuk tugas-tugas administrasi database lain-lain.

    Digunakan untuk pembukaan meja, pandangan, disimpan prosedur, fungsi, dan sumber-sumber data untuk bentuk dan subreports (tapi tidak untuk utama laporan itu sendiri).

    Digunakan untuk mendapatkan sumber-sumber data untuk kotak kombo, daftar kotak, dan laporan.
  2. Digunakan untuk membuka meja, dilihat, disimpan prosedur, fungsi, dan sumber-sumber data untuk bentuk dan subreports (tetapi tidak untuk utama laporan itu sendiri).

    Digunakan untuk mendapatkan sumber-sumber data untuk combo kotak, kotak daftar, dan laporan.
  3. Digunakan untuk mendapatkan sumber-sumber data untuk kotak kombo, daftar kotak, dan laporan.

Meskipun koneksi # 2 dan # 3 dapat diakses cukup mudah, ada tidak ada metode yang tersedia untuk melaksanakan prosedur yang tersimpan di konteks koneksi # 1. Untungnya, sambungan ini adalah yang paling penting dari tiga dan mudah bekerja di sekitar dengan membangun pengguna Anda sendiri antarmuka (sebagai contoh, suatu bentuk switchboard-tipe) untuk menangani database objek Alih-alih mengandalkan jendela Database built-in.

Berikut langkah-langkah menggunakan Northwind contoh akses proyek untuk menunjukkan bagaimana menerapkan aplikasi peran terhadap koneksi # 2 dan # 3:

  1. Di jendela Database, klik Bentuk di bawah Objek, klik Baru, lalu klik Oke untuk membuka formulir baru dalam Design view.

    Catatan Di Access 2007, klik Rancangan Borang dalam Bentuk kelompok pada Buat tab.
  2. Tambahkan daftar kotak untuk bentuk baru dibuat, dan kemudian menetapkan Nama properti daftar kotak untuk lst_AppRole.
  3. Tambahkan tombol perintah ke bentuk.
  4. Menetapkan OnClick properti tombol perintah baru untuk acara berikut prosedur:
    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. Menutup lingkungan Visual Basic untuk kembali ke bentuk.
  6. Menyimpan formulir, dan kemudian beralih formulirBentuk Lihat.
  7. Klik tombol perintah untuk menjalankan kode yang mendasari.

    Pemberitahuan bahwa Anda menerima sebuah kotak pesan yang menunjukkan keberhasilan.
  8. Di jendela Database, klik Tabel di bawah Objek, kemudian buka tNewTable tabel.

    Catatan Pada Access 2007, klik dua kali tNewTable Tabel di panel navigasi.
  9. Memodifikasi sebuah record dan mencoba untuk menyimpan perubahan.
Perhatikan bahwa saat Anda mencoba mengkomit perubahan Anda, Anda menerima pesan kesalahan tentang tidak memiliki izin memadai. Hal ini terjadi karena Anda memberi peran aplikasi baru Pilih izin pada tNewTable tabel, tetapi tidak Pemutakhiran izin.

Dengan desain, akses hanya menunjukkan objek dalam Database jendela yang pengguna memiliki setidaknya pilih atau mengeksekusi perizinan. Akses menggunakan koneksi # 1 untuk menentukan yang objek pengguna memiliki izin untuk. Setelah menerapkan peran aplikasi untuk koneksi # 2 dan # 3, Database jendela masih menunjukkan sama objek bahwa itu sebelumnya, meskipun pengguna mungkin tidak memiliki izin untuk semua objek, atau mungkin memiliki izin untuk lebih objek yang tidak ditampilkan. Hal ini dapat mengakibatkan perilaku tak terduga ketika Anda menggunakan jendela Database.

Sebagai contoh, ketika Anda membuka tNewTable meja, "tampaknya" bahwa pengguna memiliki izin untuk mengedit dan Masukkan catatan. Masukkan catatan baru ikon di bawah meja adalah diaktifkan, dan pengguna dapat menempatkan catatan dalam edit mode. Anda tidak melihat apapun petunjuk visual yang menunjukkan sebaliknya sampai Anda mencoba untuk melakukan edit atau sisipkan, yang akan menghasilkan pesan kesalahan. Akses percaya bahwa Anda memiliki izin ketika Anda benar-benar tidak.

Solusi paling efektif adalah untuk memberikan kustom antarmuka untuk pengguna dan tidak mengandalkan jendela Database. Dengan menggunakan switchboard-jenis antarmuka, Anda dapat mengontrol persis benda-benda yang pengguna memiliki akses ke.

Keterbatasan lainnya dan pertimbangan keamanan

Subforms tidak bekerja

Tidak seperti dengan benda database lain, akses tidak selalu menggunakan sambungan yang sama untuk mengambil sumber data subform. Akses sering (tapi tidak selalu) menciptakan koneksi baru ke SQL Server hanya untuk menangani subform recordset, atau untuk mengambil data lapangan menghubungkan yang menghubungkan subform bentuk utama. Karena hubungan baru ini tidak memiliki peran aplikasi yang diterapkan, izin kesalahan akan dihasilkan jika Anda tidak memiliki izin yang eksplisit untuk database objek. Sayangnya, ini berarti bahwa tidak ada cara yang dapat diandalkan untuk menggunakan terikat subforms ketika aplikasi peran diterapkan. Solusi hanya efektif adalah untuk memiliki sepenuhnya tdk dijilid subforms, dengan manipulasi data ditangani pemrograman. Ini adalah yang paling pembatasan serius ketika menggunakan aplikasi peran dalam akses.

Laporan tidak bekerja

Ketika Anda memiliki objek seperti tabel atau view nama terdaftar sebagai sumber data untuk laporan atau subreport, akses memeriksa untuk melihat Apakah obyek terdaftar dalam Database jendela sebelum mengambil data dari SQL Server. Karena jendela Database menggunakan sambungan yang tidak memiliki peran aplikasi yang diterapkan, galat jika Anda tidak memiliki izin yang eksplisit untuk sumber data yang mendasarinya.

Untuk bekerja di sekitar masalah ini, selalu menggunakan Transact-SQL pernyataan sebagai sumber data untuk bentuk dan laporan. Sebagai contoh, menggunakan "Pilih * dari ViewName" bukan hanya "ViewName" atau "Exec StoredProcedureName" bukannya hanya "StoredProcedureName." Dengan cara ini, akses lewat Transact-SQL pernyataan langsung ke SQL Server dan mengambil data berdasarkan izin peran aplikasi.

Peran publik Database

Peran aplikasi mengakuisisi hak akses Database publik peran. Secara default di NorthwindCS, peran publik telah penuh izin untuk sebagian besar objek. Oleh karena itu, peran aplikasi secara umum tidak efektif. Ketika Anda menciptakan tabel tNewTable dalam "membuat Aplikasi peran"bagian, peran publik tidak diberikan izin untuk meja, dan kemudian melihat efek aplikasi peran keamanan konteks pada meja. Namun, meja lainnya mungkin tidak menunjukkan perbedaan di bawah aplikasi peran karena peran publik memiliki izin untuk orang-orang objek.

VBA keamanan

Karena password untuk peran aplikasi dimasukkan ke dalam aplikasi yang disebut, pengguna berpengetahuan akan mampu membaca aplikasi peran nama dan password dari sumber kode, dan kemudian menggunakan informasi tersebut untuk mendapatkan akses ke SQL Server dari yang lain aplikasi. Oleh karena itu, itu adalah ide yang baik untuk mengkompilasi ADP ke berkas ADE sehingga kode sumber tidak dapat dilihat. Minimal, menegakkan sandi pada VBA proyek.

REFERENSI

Untuk informasi tambahan tentang versi Microsoft Access 2000 artikel ini, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
318816 ACC2000: Bagaimana menggunakan aplikasi peran dengan proyek-proyek Access dan SQL Server 2000 Desktop mesin (MSDE 2000)
Untuk informasi lebih lanjut tentang GRANT, lihat SQL Server buku secara Online. The SQL Server buku secara Online ini tersedia pada Website Microsoft berikut:
http://www.Microsoft.com/SQL/techinfo/productdoc/2000/default.asp
Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice. See Terms of Use for other considerations.

Properti

ID Artikel: 308312 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Kata kunci: 
kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:308312

Berikan Masukan

 

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