Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

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

Hỗ trợ dành cho Office 2003 đã kết thúc

Microsoft đã kết thúc hỗ trợ dành cho Office 2003 vào ngày 8 tháng 4 năm 2014. Thay đổi này đã ảnh hưởng đến các bản cập nhật phần mềm và các tùy chọn bảo mật của bạn. Tìm hiểu ý nghĩa của điều này với bạn và cách thực hiện để luôn được bảo vệ.

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
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.
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 BooleanOn Error GoTo EH:If CurrentProject.IsConnected ThenDim sTSQL As String    'Create the commandsTSQL = "EXEC sp_addapprole '" & RoleName & "','" & PW & "'"    'Send the commandApplication.CurrentProject.Connection.Execute sTSQLAddNewAppRole = TrueElseAddNewAppRole = FalseEnd IfExit FunctionEH:MsgBox Err.Number & ": " & Err.Description, vbCriticalAddNewAppRole = FalseEnd 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 " & strRoleNameElseMsgBox "ADP must be connected to SQL Server"End IfExit SubEH: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 FalseDim TSQLTSQL = "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 = TSQLlst_approle.RequeryDoCmd.SetWarnings TrueMsgBox "The application Role is now in effect.", vbInformationExit SubEH: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.
ACC2002 reviewdocidACC2003 ACC2007
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

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 308312 - Xem lại Lần cuối: 09/17/2011 23:40:00 - Bản sửa đổi: 3.0

Microsoft Office Access 2007, Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition

  • kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtvi
Phản hồi