2009-02-21 11 views
5

Cảm ơn bạn đã đọc điều này.Đối với tập dữ liệu SAS, cách tốt nhất để ngăn chặn khóa cho nhiều quyền truy cập của người dùng là

Tôi đang sử dụng dịch vụ dùng chung (server = sharedLib) khi thiết lập libref của mình, cho phép người dùng ứng dụng SAS/IntrNet sửa đổi và cập nhật (thêm mới) bản ghi của một tập dữ liệu duy nhất. Ứng dụng này cũng sẽ được sử dụng để truy vấn tập dữ liệu của tôi. Để giảm thiểu khóa, tôi chỉ sử dụng một bước dữ liệu để sửa đổi và cập nhật thay vì Proc SQL (khóa toàn bộ thành viên). Tuy nhiên, tôi tự hỏi nếu khóa là nhiều hơn hoặc ít có khả năng nếu chỉ cập nhật/sửa đổi quyền truy cập vào dữ liệu sử dụng dịch vụ chia sẻ nhưng truy vấn thì không.

%if &type=QUERY %then %do ; 
LIBNAME lib '/myServer/library' ; 
%end ; 
%else %do ; 
LIBNAME lib '/myServer/library' server=shareLib ; 
%end; 

đây không phải là mã thực sự của tôi, nhưng tôi biết liệu yêu cầu sẽ gửi dữ liệu trở lại hoặc sửa đổi bản ghi hiện có hay thêm bản ghi mới (cập nhật); Tôi đã ban đầu thực hiện sự khác biệt này bởi vì chúng tôi đã có một số lỗi liên quan đến dịch vụ chia sẻ (không chắc chắn đó là thuật ngữ chính xác), nhưng việc tham khảo lib để truy vấn dữ liệu không thành công. Kể từ đó chúng tôi có, tôi nghĩ rằng giải quyết vấn đề này, nhưng tôi tự hỏi nếu tôi đặt mình lên cho các vấn đề.

Cảm ơn

Trả lời

7

Kể từ câu hỏi của bạn giống như một yêu cầu để được tư vấn chung về truy cập dữ liệu và đồng thời trong SAS, câu trả lời của tôi sẽ được hình thành như lời khuyên chung, hơn là một giải pháp cụ thể.

Có tài liệu trực tuyến SAS tuyệt vời. Vui lòng truy cập the index và tìm thông tin có liên quan để bạn đọc thêm.

  1. Vui lòng xem xét thêm tùy chọn "ACCESS=READONLY". Nó khá nhiều những gì nó nói, cụ thể là hạn chế quyền truy cập vào các thành viên dữ liệu trong libname để chỉ đọc. Điều này giữ lợi ích mà bạn không thay đổi dữ liệu của bạn một cách tình cờ trong một truy vấn không thay đổi. Nó cũng cho phép SAS để lại một số phòng cho các truy vấn thay đổi dữ liệu để có được mức độ kiểm soát cao hơn đối với dữ liệu.
  2. SAS/SHARE cho phép truy cập dữ liệu đồng thời, vì vậy nếu bạn cần cung cấp quyền truy cập đồng thời (đọc/ghi) vào cùng một dữ liệu, SAS/SHARE là một lựa chọn tốt. Điều đó có nghĩa là bạn có thể thoát khỏi việc chỉ định libname của bạn chỉ một lần, đưa ra tuyên bố libname của bạn tùy chọn "SERVER=SHARELIB" và có SAS/SHARE quản lý quyền truy cập dữ liệu đồng thời. Nếu bạn gán libname cho quá trình SAS/SHARE server, tất cả các tiến trình SAS tiếp theo cần truy cập vào libname này chỉ phải gán tên libname như "LIBNAME LIB SERVER=SHARELIB" (lưu ý không có đường dẫn vật lý - quá trình SAS/SHARE sẽ xử lý). Thiết lập này hoạt động tốt nhất nếu bạn có một quy trình SAS riêng cho máy chủ SAS/SHARE của bạn.
  3. Bạn cũng có thể khóa tên hiệu của mình bằng lệnh LOCK hoặc lệnh LOCK. Điều này có nghĩa là chương trình SAS của bạn có thể tự bảo đảm quyền truy cập độc quyền vào một tên libname, trong trường hợp đó là những gì bạn cần. Các quy trình SAS khác sau đó có thể sử dụng lệnh khóa để truy vấn một libname cụ thể và xem liệu nó có thể truy cập (độc quyền) không.
  4. Bạn cũng có thể kiểm soát quyền truy cập ở cấp thành viên dữ liệu. Điều này được thực hiện với tùy chọn bộ dữ liệu CNTLLEV. Ví dụ: "DATA LIB.MYDATA(CNTLLEV=LIB);" chỉ định rằng kiểm soát truy cập ở cấp thư viện, hạn chế quyền truy cập đồng thời vào chỉ một quy trình cập nhật đối với thư viện. CNTLLEV=MEMCNTLLEV=REC hạn chế quyền truy cập đồng thời ở cấp thành viên và cấp bản ghi tương ứng.

Các tùy chọn này có thể được kết hợp theo nhiều cách khác nhau, mang lại nhiều chỗ cho bạn để truy cập tốt như bạn cần. Tôi hy vọng những lựa chọn này sẽ giúp bạn hoàn thành nhiệm vụ của mình.

+0

Cảm ơn bạn đã phản hồi –

Các vấn đề liên quan