Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Hỏi về phân quyền Database

  1. #1
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Hỏi về phân quyền Database

    Mình đang phân tích 1 project.

    Database thì thiết kế rồi nhưng có 1 vướng mắc như sau trong quá trình xây dựng như sau:

    - Chương trình khi khởi động sẽ hiện đăng nhập USER + PASSWORD.

    - Nếu đăng nhập thành công thì sẽ kiểm soát quyền hạn của USER đó.
    + Ví dụ như:
    . usrA chỉ có quyền xem thông tin (hay 1 phần) về nhân viên.
    . Trong khi userB lại có thể sửa đổi, và xóa, thêm...

    Mình bị vấn đề về quyền hạn ở đây.
    Mình ko biết là nên để hệ quản trị xử lý quyền hạn hay là do chương trình của mình xử lý.
    -> Nếu HQT xử lý thì mình chưa biết cách làm.

    -> Nếu chtr của mình xử lý thì liệu nó có bảo mật hay không? nhưng làm thế nào thì mình ko định được hướng phát triển.

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Trích dẫn Nguyên bản được gửi bởi ZCoder87 Xem bài viết
    Mình đang phân tích 1 project.

    Database thì thiết kế rồi nhưng có 1 vướng mắc như sau trong quá trình xây dựng như sau:

    - Chương trình khi khởi động sẽ hiện đăng nhập USER + PASSWORD.
    vấn đề này không khó , đơn giản nhất là trong frmmain_load event bạn show loginform , nếu querry db correct thi cho vô tiếp hoặc close frmmain là xong



    - Nếu đăng nhập thành công thì sẽ kiểm soát quyền hạn của USER đó.
    + Ví dụ như:
    . usrA chỉ có quyền xem thông tin (hay 1 phần) về nhân viên.
    . Trong khi userB lại có thể sửa đổi, và xóa, thêm...
    Mình bị vấn đề về quyền hạn ở đây.
    Mình ko biết là nên để hệ quản trị xử lý quyền hạn hay là do chương trình của mình xử lý.
    -> Nếu HQT xử lý thì mình chưa biết cách làm.
    bạn có thể
    +Phân quyền ở mức menu( người dùng chỉ được truy nhập vào 1 số menu xác định phù hợp , ví dụ, nhân viên không thể truy cập vào đc menu báo cáo ngày, nhưng người quản lý thì vô được
    +Phân quyền ở cấp độ chi tiết FORM + điều khiển (bạn phải tạo ra các thông tin permission chi tiết phù hợp với mỗi user, ví dụ có thể gồm các quyền cơ bản sau sau
    - Sửa riêng : Chỉ được phép sửa bản ghi do chính mình tạo ra
    - Sửa tất cả :Được phép sửa tất cả các bản ghi ( ADMIN )
    - Xem riêng : chỉ cho phép xem bản ghi của mình
    -Xem tất
    -Xóa riêng
    -Xoá tất
    -Thêm

    bạn có thể tham khảo thêm ở đây
    http://www.dot.net.vn/Desktop.aspx/T...ng/2.viePortal

    -> Nếu chtr của mình xử lý thì liệu nó có bảo mật hay không? nhưng làm thế nào thì mình ko định được hướng phát triển.
    vấn đề này rất quan trọng, bạn phải xác định được hướng mở rộng , quy mô phát triển của doanh nghiệp để có hướng xác định kiến trúc phù hợp, giả dụ sau này khách hàng của bạn mở thêm vài chục chi nhánh ở miền bắc, rồi thậm chí truy cập dữ liệu qua mobil , pocket PC ,palm ó chứ ko phải qua desktop PC nữa thì bạn vẫn ko phải viết lại toàn bộ chương trình , đồng thời đảm bảo sercurities ... hãy tìm hiểu thêm về cách viết chương trình theo kiến trúc client - server hay ntier,hoặc tốt nhất tìm hiểu ngay kiến trúc SOA với WCF ( VS2k8) nếu có thời gian tôi sẽ đào sâu về vấn đề này, tuy nhiên trước đó bạn cần chịu khó MSDN nhé !! rất vui đc chia sẻ

  3. #3
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Lúc trước mình cũng có làm về cái này!
    Cách của mình là tạo thêm column để xác định loại user!
    VD:
    UsrID UsrName Type

    Cách 1:
    + Khi login,dùng store procedure để check và lấy value trả về của Type để xác định loại user (có quyền gì,...)! Khi thêm, sửa,... thì dùng username và pass truyền lại vào store procedure tiếp! Store sẻ check lại xem usr đó được quyền thêm,... hay không, nếu có quyền thì thêm! Tại sao phải check lại khi đả đăng nhập thành công ???! Vì khi nhận giá trị trả về của store, value đó có thể bị dò ra (có khá nhiều tool để làm chuyện này)! Nếu chúng ta không check lại mà thêm vào thì sẻ nguy hiểm lắm! Nhưng cách này sẻ chạy rất chậm nếu có nhiều user! Sang cách 2 thôi!

    Cách 2: (lúc trước mình làm bằng cách này cho project)!
    + Vì số user có thể thay đổi thông tin, thêm,... ít hơn nhiều so với user bình thường nên chúng ta sẻ chia làm 2 table, table cho user bình thường và table cho user có quyền cao hơn!
    + Khi login dùng y hệt cách trên, nhưng chắc chắc là nhanh hơn nhiều (vì số user trong table 2 nhỏ hơn)!
    + Nếu có quá nhiều loại user thì mình sẻ làm nhiều table hoặc gom những loại user có số lượng ít vào một table rồi dùng column Type để check!

    Dù làm cách nào thì mỗi bước truyền, nhận thông tin đều phải encrypt, ngay cả username và password trong database cũng phải encrypt luôn!

    Không biết có giúp gì được cho Z ko?!

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Cám ơn 2 bạn nhé.

    Thật ra là mình đang thực tập. Họ giao cho mình project này để test kỹ năng của mình.

    Cụ thể là nếu project thành công thì nó sẽ được sử dụng trong nội bộ công ty. Mình là một sinh viên thực tập và may mắn được giới thiệu nên mình được quản lý nhóm những sv thực tập khác. Mấu chốt là ko ai biết lập trình mạng Winsock, TCP, UDP... vì ko có kiến thức về mạng máy tính mà chỉ có kỹ năng về CSDL.

    Yêu cầu đặt ra là phải bảo mật. Vì đặc tính công việc, các dự án, thông tin toàn bộ nhân viên của công ty sẽ được lưu ở đây và không phải ai có thể đọc được.

    Nếu xử lý theo hướng bình thường là:
    Code:
    SQL Server < ----- ADO.NET ----- > Client
    Thì mình thấy nó có cái gì đó không an toàn bởi vì mấu chốt quyền data ở đây được Client xử lý.

    - Với C++/WIN32 thì đây là 1 nhược điểm, một lỗ hỗng rất lớn. Ví dụ như bạn sẽ connect DataBase = 1 connect string. Trong str đó có source data + user + password và vô tình đã công khai ở đây. Hơn nữa, quyền ở đây là 1 chuỗi dữ liệu đưa về cho Client để nó disable các chức năng, 1 attacker chuyên nghiệp có thể đọc dược chuỗi connect này bởi vì nó là 1 const string lưu trong file .exe hay là nếu họ có 1 bản client, họ có thể c.ra_ck full quyền với user là 1 nhân viên bình thường là điều hoàn toàn trong tầm tay.

    - Ở .NET dịch ra MSIL chứ không phải ASM nên nó có thể an toàn hơn. Nhưng cũng không chắc có gì đảm bảo.

    Nhưng mình đã nghĩ ra hướng dùng SOA như haipt (cám ơn nhé) một công nghệ đặc trưng của .NET.

    Code:
    [WEB SERVICES]  <------------- SOAP (XML) ----------> [CLIENT]
         |
         |
      ADO.NET
         |
         |
    [SQL SERVER]
    Như vậy khi Client yêu cầu cập nhật, hay xóa dl thì Server sẽ chủ động làm điều đó chứ không phải client như trên. Cách này chuyên nghiệp hơn và cũng bảo mật hơn nhưng để đảm bảo DL thì cũng phải mã hóa dữ liệu XML khi truyền.

    Những ai chuyên về lĩnh vực này có thể tư vấn cho mình hay không?
    Cụ thể là:
    - Phát triển có khó hay không?
    - Trong thời gian 2 tháng có thể xây dựng được hay không?

    Cám ơn mọi người đã quan tâm!

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    294

    Về n-tier Dark nghĩ bạn có thể dùng remoting sẽ đơn giản hơn SOA(lưu ý là SOA khác với SOAP,Service Oriented Achitecture >< Simple Object Access Protocol).

    Nếu bạn dùng remoting thì không khó và 2 tháng là quá đủ ^^!

    Dark cũng muốn nói thêm về vấn đề phân quyền một chút ^^! Như bác Pham đã nói ở trên,thường có 2 mức phân quyền là trên menu và phân quyền trên form. Tuy nhiên để tránh trường hợp nhân viên của bạn nghịch ngợm dẫn tới thay đổi cách thức hoạt động của form thì bạn có thể check lại trên cả server trước khi tiến hành thay đổi.

    Một chú ý nữa là khi phân quyền có thể được phân theo role.Không rõ bên Z đã phân tích vấn đề này chưa?
    Tức là không phân quyền cụ thể cho từng user mà phân quyền theo role sau đó gán các user theo role.

    Cheers!
    Is the moon rising...

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Mặc định Hỏi về phân quyền Database

    Trích dẫn Nguyên bản được gửi bởi ZCoder87 Xem bài viết
    - Ở .NET dịch ra MSIL chứ không phải ASM nên nó có thể an toàn hơn. Nhưng cũng không chắc có gì đảm bảo.
    Bạn nhầm rồi, chính vì dịch ra MSIL lên việc ***** .net app là cực kỳ dễ dàng nếu để *****er tiếp cận vật lý assemblly thì việc ***** chỉ là vấn đề thời gian.
    Do vậy để bảo mật chỉ có cách viết theo kiến trúc client server hay SOA,
    implement các biện pháp bảo mật server còn client thì ko cần, vì nếu *****er có tiếp cận và thậm chí dò đc hết mã nguồn client thì cũng ko giải quyết đc vấn đề gì...


    Nhưng mình đã nghĩ ra hướng dùng SOA như haipt (cám ơn nhé) một công nghệ đặc trưng của .NET.

    Code:
    [WEB SERVICES]  <------------- SOAP (XML) ----------> [CLIENT]
         |
         |
      ADO.NET
         |
         |
    [SQL SERVER]
    Như vậy khi Client yêu cầu cập nhật, hay xóa dl thì Server sẽ chủ động làm điều đó chứ không phải client như trên. Cách này chuyên nghiệp hơn và cũng bảo mật hơn nhưng để đảm bảo DL thì cũng phải mã hóa dữ liệu XML khi truyền.

    Những ai chuyên về lĩnh vực này có thể tư vấn cho mình hay không?
    Cụ thể là:
    - Phát triển có khó hay không?
    - Trong thời gian 2 tháng có thể xây dựng được hay không?

    Cám ơn mọi người đã quan tâm!
    Hai tháng là đủ tuy nhiên căn cứ vào những gì bạn trình bày tôi nghĩ bạn cần thu xếp thời gian chặt chẽ đó. SOA <> SOAP...

Các đề tài tương tự

  1. Phân Quyền (Phần II : Phân Quyền Trên Methods (Form))
    Gửi bởi phucpham trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 45
    Bài viết cuối: 08-10-2016, 10:29 PM
  2. Database Connect database bằng quyền Sa như thế nào?
    Gửi bởi ThoLD trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 18-07-2011, 05:12 PM
  3. đăng ký bản quyền sáng chế, bản quyền tác giả 0903034381
    Gửi bởi thngxanhcty trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-12-2010, 01:20 PM
  4. Quyền truy cập database SQL Sever
    Gửi bởi H2O trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 2
    Bài viết cuối: 21-08-2009, 11:03 AM
  5. Làm sao sử dụng lại Database của SQL với quyền Login khác?
    Gửi bởi trickyboy trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 7
    Bài viết cuối: 20-02-2009, 06:27 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn