Làm th? nào đ? s? d?ng ?ng d?ng vai tr? v?i các d? án Access và SQL Server 2000 Desktop Edition

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 308312 - Xem s?n ph?m mà bài này áp d?ng vào.
Nâng cao: Đ?i h?i chuyên gia m? hóa, kh? năng tương tác và multiuser k? năng.

Bài vi?t này ch? áp d?ng cho m?t d? án truy c?p Microsoft (.adp).

Đ?i v?i m?t phiên b?n Microsoft Access 2000 c?a bài vi?t này, xem 318816.
Bung t?t c? | Thu g?n t?t c?

TÓM T?T

Bài này gi?i thích các kh? năng, nh?ng h?n ch?, và cách gi?i quy?t cho vi?c s? d?ng Microsoft SQL Server ?ng d?ng vai tr? trong m?t Microsoft Access d? án (ADP).

THÔNG TIN THÊM

Trong SQL Server, b?n có th? t?o cơ s? d? li?u vai tr? cho d? dàng hơn hành chính quy?n trong cơ s? d? li?u. Thay v? c?a c?p gi?y cá nhân c?p phép cho m?i ngư?i dùng m?t cách riêng bi?t, b?n có th? nhóm ngư?i dùng v?i cùng m?t s? cho phép c?n b?ng cách làm cho h? các thành viên c?a cùng m?t cơ s? d? li?u thư?ng xuyên vai, và sau đó gán quy?n cho vai tr? cơ s? d? li?u riêng c?a m?nh. Tr? khi m?t c? th? s? cho phép r? ràng b? t? ch?i ? nơi khác, tài kho?n c?a ngư?i dùng s? có đư?c các quy?n c?p cho vai tr? cơ s? d? li?u đó.

Trong khi cơ s? d? li?u thư?ng xuyên vai tr? là r?t h?u ích cho các t?nh hu?ng mà b?n mu?n ngư?i dùng có th? th?c hi?n phi th? th?c truy v?n riêng c?a h? ho?c C?p Nh?t c?a cơ s? d? li?u, h? không ph?i là luôn luôn thích h?p. Đôi khi, b?n có th? mu?n ngư?i dùng ch? có m?t s? quy?n khi h? s? d?ng m?t ?ng d?ng c? th?, và b?n không mu?n đ? có th? xem ho?c S?a đ?i d? li?u bên ngoài các ?ng d?ng.

M?t trong nh?ng phương pháp đó thư?ng đư?c s? d?ng đ? làm vi?c xung quanh này là đ? ch? cho các quy?n c?n thi?t đ? m?t SQL Máy ch? trương m?c ngư?i dùng. Nh?ng ngư?i s? d?ng th?c t? có th? có quy?n đ? k?t n?i v?i m?t cơ s? d? li?u nhưng không ph?i đ? xem ho?c s?a đ?i b?t k? d? li?u. Sau khi ngư?i dùng k?t n?i v?i các cơ s? d? li?u b?ng cách s? d?ng tài kho?n cá nhân c?a ngư?i dùng, ADP có th? sau đó l?p tr?nh k?t n?i l?i b?ng cách s? d?ng các ch?ng ch? c?a trương m?c ngư?i dùng nào có quy?n. Trong khi đi?u này có th? đư?c hi?u qu?, nó không cho phép b?n đ? phân bi?t gi?a các ngư?i dùng trong cơ s? d? li?u ho?c đ? xác đ?nh ngư?i dùng th?c hi?n m?t hành đ?ng c? th?.

Vai tr? c?a ?ng d?ng đư?c thi?t k? đ? làm vi?c xung quanh gi?i h?n này. Vai tr? áp d?ng, không gi?ng như vai tr? cơ s? d? li?u thư?ng xuyên, không có các thành viên chính h?. Thay vào đó, ngư?i dùng đăng nh?p vào m?t máy ch? SQL và k?t n?i v?i m?t cơ s? d? li?u b?ng cách s? d?ng thông tin đăng nh?p c?a h?. Vào th?i đi?m đó, b?i c?nh an ninh c?a m?t vai tr? c?a ?ng d?ng có th? đư?c áp d?ng l?p tr?nh đ? k?t n?i hi?n có b?ng b?ng cách s? d?ng các sp_setapprole th? t?c đư?c lưu tr?. Trong SQL Server, ngư?i dùng cá nhân v?n c?n khác bi?t nhưng các c?p phép có s?n trong m?t c? th? k?t n?i đư?c gi?i h?n s? cho phép c?a vai tr? c?a ?ng d?ng. C?a ngư?i dùng cá nhân quy?n, cho dù th?p hơn ho?c l?n hơn, là không c?n xem xét.

Vi?c t?o ra m?t ?ng d?ng vai tr?

Microsoft Access các d? án không có b?t k? thi?t k? tr?c quan công c? đ? t?o SQL Server Security các đ?i tư?ng như ?ng d?ng vai tr?. Microsoft khuy?n cáo b?n s? d?ng các công c? máy khách đư?c bao g?m trong các Phiên b?n thư?ng xuyên c?a SQL Server ho?c Microsoft Office XP nhà phát tri?n cho vi?c t?o các ?ng d?ng vai tr? và gán quy?n. Tuy nhiên, b?n v?n có th? t?o vai tr? c?a ?ng d?ng và c?p cho nó các quy?n c?n thi?t l?p tr?nh b?i b?ng cách s? d?ng Transact-SQL (T-SQL) t? m?t ADP. M?c dù m?t cu?c th?o lu?n đ?y đ? c?a SQL B?o m?t máy ch? là ? bên ngoài ph?m vi c?a bài vi?t này, thông tin b? sung có th? đư?c t?m th?y trong SQL Server sách tr?c tuy?n Các bư?c sau đây cho b?n th?y làm th? nào đ? l?p tr?nh t?o ra m?t ?ng d?ng vai tr? và grant vai tr? m?i Ch?n c?p phép trên m?t b?ng:
  1. B?t đ?u truy c?p.
  2. M? d? án truy c?p Northwind m?u.
  3. Trong c?a s? cơ s? d? li?u, b?m Mô-đun dư?i Các đ?i tư?ng, sau đó b?m M?i đ? m? m?t mô-đun m?i trong môi trư?ng Visual Basic.

    Chú ý Trong Access 2007, nh?p vào Mô-đun trong các Khác nhóm vào các Tạo tab.
  4. G? hay dán đo?n m? sau vào các phân h? m?i:
    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. Lưu các mô-đun, và sau đó thoát ra Visual Basic Môi trư?ng.
  6. T?o m?t b?n sao c?a các Khách hàng b?ng, và sau đó lưu nó như tNewTable. Để thực hiện việc này, hãy làm theo những bước sau:
    1. Trong c?a s? cơ s? d? li?u, b?m chu?t ph?i vào các Khách hàng b?ng, và sau đó nh?p vào Löu laøm trên menu phím t?t.

      Chú ý Trong Access 2007, b?m các Khách hàng b?ng trong ngăn d?n hư?ng, nh?p vào Microsoft Office Button, đi?m đ?n Löu laøm, sau đó b?m Lưu đ?i tư?ng như.
    2. Trong các Löu laøm h?p tho?i, lo?i tNewTable trong các Lưu b?ng 'Khách hàng' h?p, và sau đó nh?p vào Ok.
  7. Trong c?a s? cơ s? d? li?u, b?m Các h?nh th?c dư?i Các đ?i tư?ng, b?m M?i, sau đó b?m Ok đ? m? m?t h?nh th?c m?i trong thi?t k? giao di?n.

    Chú ý Trong Access 2007, nh?p vào Thiết kế Mẫu trong các Các h?nh th?c nhóm vào các Tạo tab.
  8. Thêm m?t nút l?nh m?u m?i.
  9. Đ?t các OnClick b?t đ?ng s?n c?a nút l?nh m?i cho s? ki?n này sau th? t?c:
    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. Đóng môi trư?ng Visual Basic đ? tr? v? các h?nh th?c.
  11. Lưu bi?u m?u, và sau đó chuy?n đ?i các h?nh th?c đ? các H?nh th?c xem.
  12. Nh?p vào nút l?nh đ? ch?y m? n?m bên dư?i.

    Thông báo mà b?n nh?n đư?c hai thư h?p đ? ch? ra s? thành công. B?n nh?n đư?c sau khi m?t trong vai tr? c?a ?ng d?ng đư?c t?o ra, và nh?ng th? hai sau khi vai tr? m?i quy?n đ? tNewTable đư?c c?p.

Tri?n khai th?c hi?n vai tr? c?a ?ng d?ng

Complication chính khi b?n đang s? d?ng ?ng d?ng vai tr? trong Truy c?p vào các d? án là truy c?p s? d?ng ba k?t n?i đ?n máy ch? SQL đ? x? l? nhi?u tác v?. L? tư?ng nh?t, đ? áp d?ng m?t vai tr? áp d?ng cho toàn b? d? án, b?n đ? có th? th?c hi?n sp_setapprole trong b?i c?nh c?a t?t c? ba các k?t n?i. Các đ?i tư?ng đư?c qu?n l? m?i k?t n?i là như sau:

  1. Đư?c s? d?ng đ? xác đ?nh các đ?i tư?ng mà xu?t hi?n trong cơ s? d? li?u c?a s? và cho tác v? qu?n tr? cơ s? d? li?u khác bi?t.

    Đư?c s? d?ng cho m? bàn, xem, th? t?c đư?c lưu tr?, ch?c năng, và các ngu?n thu âm cho t?o và subreports (nhưng không ph?i cho các chính báo cáo chính nó).

    Đư?c s? d?ng cho vi?c thu th?p ngu?n thu âm cho h?p t? h?p, h?p danh sách và báo cáo.
  2. Đư?c s? d?ng cho vi?c m? bàn, xem, th? t?c đư?c lưu tr?, ch?c năng, và các ngu?n thu âm cho các h?nh th?c và subreports (nhưng không ph?i cho các chính báo chính nó).

    Đư?c s? d?ng cho vi?c thu th?p ngu?n thu âm cho combo h?p, h?p danh sách và báo cáo.
  3. Đư?c s? d?ng cho vi?c thu th?p ngu?n thu âm c?a h?p t? h?p, danh sách h?p, và báo cáo.

M?c dù các k?t n?i # 2 và # 3 có th? đư?c truy c?p khá m?t cách d? dàng, không có không có phương pháp có s?n đ? th?c hi?n các th? t?c đư?c lưu tr? trong các b?i c?nh c?a k?t n?i # 1. May m?n thay, k?t n?i này là quan tr?ng nh?t ba và d? dàng làm vi?c xung quanh c?a xây d?ng ngư?i s? d?ng c?a riêng b?n giao di?n (ví d?, m?t m?u ki?u t?ng đài) đ? x? l? các đ?i tư?ng cơ s? d? li?u thay v? c?a d?a vào c?a s? đư?c xây d?ng trong cơ s? d? li?u.

Sau đây bư?c s? d?ng d? án truy c?p Northwind m?u đ? ch?ng minh làm th? nào đ? áp d?ng m?t ?ng d?ng vai tr? ch?ng l?i các k?t n?i # 2 và # 3:

  1. Trong c?a s? cơ s? d? li?u, b?m Các h?nh th?c dư?i Các đ?i tư?ng, b?m M?i, sau đó b?m Ok đ? m? m?t h?nh th?c m?i trong thi?t k? giao di?n.

    Chú ý Trong Access 2007, nh?p vào Thiết kế Mẫu trong các Các h?nh th?c nhóm vào các Tạo tab.
  2. Thêm m?t h?p danh sách m?u m?i đư?c t?o ra, và sau đó thi?t l?p các Tên tài s?n c?a h?p danh sách lst_AppRole.
  3. Thêm m?t nút l?nh m?u.
  4. Đ?t các OnClick b?t đ?ng s?n c?a nút l?nh m?i cho s? ki?n này sau th? t?c:
    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. Đóng môi trư?ng Visual Basic đ? tr? v? các h?nh th?c.
  6. Lưu bi?u m?u, và sau đó chuy?n đ?i các h?nh th?c đ? cácH?nh th?c xem.
  7. Nh?p vào nút l?nh đ? ch?y m? n?m bên dư?i.

    Thông báo mà b?n nh?n đư?c m?t h?p thư đó cho th?y s? thành công.
  8. Trong c?a s? cơ s? d? li?u, b?m Bảng dư?i Các đ?i tư?ng, và sau đó m? các tNewTable b?ng.

    Chú ý Trong Access 2007, b?m đúp vào tNewTable b?ng trong ngăn d?n hư?ng.
  9. Ch?nh s?a m?t b?n ghi và c? g?ng đ? lưu các thay đ?i.
Nh?n th?y r?ng khi b?n c? g?ng giao thay đ?i c?a b?n, b?n nh?n đư?c m?t thông báo l?i v? không có đ? quy?n. Đi?u này x?y ra b?i v? b?n đ? cung c?p vai tr? m?i ?ng d?ng Ch?n s? cho phép trên các tNewTable b?ng, nhưng không ph?i Cập nhật s? cho phép.

B?i thi?t k?, truy c?p ch? hi?n th? các đ?i tư?ng trong các Cơ s? d? li?u mà ngư?i dùng có ít ch?n c?a s? ho?c th?c thi quy?n. Truy c?p s? d?ng k?t n?i # 1 đ? xác đ?nh mà các đ?i tư?ng ngư?i dùng có quy?n truy c?p cho. Sau khi áp d?ng vai tr? áp d?ng cho các k?t n?i # 2 và # 3, cơ s? d? li?u c?a s? v?n cho th?y như v?y các đ?i tư?ng r?ng nó đ? làm trư?c đó, m?c dù ngư?i dùng có th? không c?n có quy?n đ? t?t c? các đ?i tư?ng, ho?c có th? có quy?n truy c?p đ? thêm các đ?i tư?ng mà không đư?c hi?n th?. Đi?u này có th? d?n đ?n hành vi b?t ng? khi b?n s? d?ng các c?a s? cơ s? d? li?u.

Ví d?, khi b?n m? các tNewTable bàn, nó "có v?" mà ngư?i dùng có quy?n đ? ch?nh s?a và chèn b?n ghi. Bi?u tư?ng thu âm m?i chèn ? dư?i cùng c?a b?ng là Kích ho?t, và ngư?i dùng có th? đ?t m?t k? l?c trong ch? đ? ch?nh s?a. B?n không th?y b?t k? đ?u m?i tr?c quan đ? ch? ra cách khác cho đ?n khi b?n c? g?ng cam k?t ch?nh s?a ho?c chèn, mà k?t qu? trong m?t thông báo l?i. Truy c?p tin r?ng b?n có quy?n khi b?n th?c s? th? không.

Các workaround có hi?u qu? nh?t là cung c?p m?t Tu? ch?nh giao di?n cho ngư?i s? d?ng và không d?a vào c?a s? cơ s? d? li?u. B?ng cách s? d?ng m?t giao di?n ngư?i dùng t?ng đài-lo?i, b?n có th? ki?m soát chính xác mà các đ?i tư?ng các ngư?i dùng có quy?n truy c?p vào.

H?n ch? và cân nh?c b?o m?t khác

Subforms không làm vi?c

Không gi?ng như v?i các đ?i tư?ng khác c?a cơ s? d? li?u, truy c?p không luôn luôn s? d?ng cùng m?t k?t n?i đ? l?y các ngu?n d? li?u c?a m?t subform. Truy c?p thư?ng xuyên (nhưng không ph?i luôn luôn) t?o ra m?t k?t n?i m?i t?i SQL Server ch? đ?n x? l? các subform recordset, ho?c đ? l?y d? li?u trư?ng liên k?t mà k?t n?i các subform m?u chính. B?i v? k?t n?i m?i này không có ?ng d?ng vai tr? áp d?ng, m?t l?i c?p phép có th? đư?c t?o ra n?u b?n không có quy?n truy c?p r? ràng đ? các đ?i tư?ng cơ s? d? li?u. Th?t không may, đi?u này có ngh?a là không đáng tin c?y đ? s? d?ng subforms ràng bu?c khi ?ng d?ng vai tr? đư?c áp d?ng. Ch? có hi?u qu? workaround là hoàn toàn unbound subforms, v?i d? li?u thao tác x? l? l?p tr?nh. Đây là nh?t h?n ch? nghiêm tr?ng khi s? d?ng ?ng d?ng vai tr? trong truy c?p.

Báo cáo không ho?t đ?ng

Khi b?n có m?t đ?i tư?ng như là m?t b?ng ho?c xem tên đư?c li?t kê như là ngu?n thu âm cho m?t báo cáo ho?c subreport, truy c?p ki?m tra đ? xem cho dù các đ?i tư?ng đư?c li?t kê trong c?a s? cơ s? d? li?u trư?c khi l?y b?t k? d? li?u t? SQL Server. B?i v? c?a s? cơ s? d? li?u s? d?ng k?t n?i mà không có ?ng d?ng vai tr? áp d?ng, m?t l?i đư?c t?o ra n?u b?n không có r? ràng quy?n đ? các ngu?n d? li?u n?m bên dư?i.

Ch?nh s?a v?n đ? này, luôn luôn s? d?ng Transact-SQL phát bi?u như là ngu?n thu âm cho các h?nh th?c và các báo cáo. Ví d?, s? d?ng "Ch?n * t? ViewName" thay v? c?a ch? "ViewName" ho?c "Exec StoredProcedureName" thay v? c?a ch? "StoredProcedureName." B?ng cách này, truy c?p đi Transact-SQL phát bi?u tr?c ti?p cho SQL Server và L?y d? li?u d?a trên s? cho phép c?a vai tr? c?a ?ng d?ng.

Vai tr? cơ s? d? li?u công c?ng

M?t vai tr? áp d?ng mua l?i s? cho phép c?a các Vai tr? cơ s? d? li?u công c?ng. Theo m?c đ?nh trong NorthwindCS, vai tr? công c?ng có đ?y đ? c?p phép cho h?u h?t các đ?i tư?ng. V? v?y, nói chung là m?t vai tr? ?ng d?ng không hi?u qu?. Khi b?n t?o b?ng tNewTable trong nh?ng "t?o m?t ?ng d?ng vai tr?"ph?n, vai tr? công c?ng không đư?c c?p phép các b?ng, và b?n sau đó đ? th?y nh?ng ?nh hư?ng c?a b?i c?nh an ninh vai tr? c?a ?ng d?ng trên b?ng này. Tuy nhiên, bàn khác có th? không hi?n th? b?t k? s? khác bi?t theo các ?ng d?ng vai tr? v? vai tr? công c?ng có c?p phép cho nh?ng các đ?i tư?ng.

An ninh VBA

B?i v? m?t kh?u cho vai di?n c?a ?ng d?ng nhúng vào các ?ng d?ng mà t? đó nó đư?c g?i là, m?t ngư?i s? d?ng hi?u bi?t s? có th? đ?c ?ng d?ng vai tr? tên và m?t kh?u t? ngu?n M?, và sau đó s? d?ng thông tin đó đ? đư?c truy c?p vào máy ch? SQL t? khác ?ng d?ng. V? v?y, nó là m?t ? tư?ng t?t đ? biên d?ch ADP vào t?p tin ADE do đó m? ngu?n không ph?i là có th? xem đư?c. ? m?c t?i thi?u, thi hành m?t kh?u trên các VBA d? án.

THAM KH?O

Đ? thêm thông tin v? m?t phiên b?n Microsoft Access 2000 c?a bài vi?t này, nh?p vào s? bài vi?t dư?i đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
318816 ACC2000: Làm th? nào đ? s? d?ng ?ng d?ng vai tr? v?i các d? án Access và SQL Server 2000 công c? máy tính đ? bàn (MSDE 2000)
Đ? bi?t thêm chi ti?t v? GRANT, xem các SQL Server sách tr?c tuy?n. Các SQL Server sách tr?c tuy?n có s?n t?i Web site sau Microsoft:
http://www.Microsoft.com/SQL/techinfo/productdoc/2000/Default.asp

Thu?c tính

ID c?a bài: 308312 - L?n xem xét sau cùng: 17 Tháng Chín 2011 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
T? khóa: 
kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:308312

Cung cấp Phản hồi

 

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