Mã hóa chuỗi kết nối VB.net + Sql Server

Liên hệ QC

chipiu3001

Thành viên hoạt động
Tham gia
22/8/15
Bài viết
105
Được thích
15
Chào các anh chị

Em là Fan của diễn đàn GPE. Rất xin lỗi vì mang câu hỏi VB.net sang đây để hỏi ( Nhưng ở chỗ khác không đông vui và Support nhanh như ở đây)- Nếu hỏi về Excel.

- Em đang viết VB.net + SQL Server => Đã viết xong ứng dụng chạy OK phục vụ công việc.

Mô hình của em: VB.net (file Exe) Chứachuỗi kết nối + User + MK Sql server => Người dùng đăng nhập từ giao diện sẽ dùng chuỗi này kết nối tới Database => Kiểm tra mật khẩu người dùng ( Nhập vào) có khớp mật khẩu người dùng lưu trên Database hay không ==> OK/NG.

Vấn đề đặt ra. Trong Dự án VB.net ( File .exe ) có chứa chuỗi kết nối + User + MK Sql server => Em muốn mã hóa chuỗi này ( Còn lại Code thì không cần).
Để người khác có view được file .Exe ( Bằng phần mềm view code VB.net) cũng không thể xem được User+MK SQL server.


Em cảm ơn mọi người.
 
Chào các anh chị

Em là Fan của diễn đàn GPE. Rất xin lỗi vì mang câu hỏi VB.net sang đây để hỏi ( Nhưng ở chỗ khác không đông vui và Support nhanh như ở đây)- Nếu hỏi về Excel.

- Em đang viết VB.net + SQL Server => Đã viết xong ứng dụng chạy OK phục vụ công việc.

Mô hình của em: VB.net (file Exe) Chứachuỗi kết nối + User + MK Sql server => Người dùng đăng nhập từ giao diện sẽ dùng chuỗi này kết nối tới Database => Kiểm tra mật khẩu người dùng ( Nhập vào) có khớp mật khẩu người dùng lưu trên Database hay không ==> OK/NG.

Vấn đề đặt ra. Trong Dự án VB.net ( File .exe ) có chứa chuỗi kết nối + User + MK Sql server => Em muốn mã hóa chuỗi này ( Còn lại Code thì không cần).
Để người khác có view được file .Exe ( Bằng phần mềm view code VB.net) cũng không thể xem được User+MK SQL server.


Em cảm ơn mọi người.
Bạn có thể gửi cái exe đó dc không để mình xem thế nào
 
- Em đang viết VB.net + SQL Server => Đã viết xong ứng dụng chạy OK phục vụ công việc.
Mô hình của em: VB.net (file Exe) Chứachuỗi kết nối + User + MK Sql server => Người dùng đăng nhập từ giao diện sẽ dùng chuỗi này kết nối tới Database => Kiểm tra mật khẩu người dùng ( Nhập vào) có khớp mật khẩu người dùng lưu trên Database hay không ==> OK/NG.

Vấn đề đặt ra. Trong Dự án VB.net ( File .exe ) có chứa chuỗi kết nối + User + MK Sql server => Em muốn mã hóa chuỗi này ( Còn lại Code thì không cần).
Để người khác có view được file .Exe ( Bằng phần mềm view code VB.net) cũng không thể xem được User+MK SQL server.

Cách tôi làm là không lưu chuỗi kết nối với username, password ngay trong ứng dụng mà lưu ở một file bên ngoài (config.ini, config.dat...). Khi ứng dụng chạy sẽ lấy chuỗi kết nối từ file bên ngoài vào xử lý. (Tôi không viết bằng Vb.Net mà chỉ là Access + SQL Server thôi nên bạn đừng hỏi sâu về .net, tôi không biết mà trả lời đâu).

File config này thì bạn có thể mã hoá các kiểu và trong ứng dụng sẽ lưu code giải mã. Nếu hack file exe mà không có file config.ini thì cũng không có thông tin user/pass login SQL Server. Nói chung cũng là một cách bảo mật nhưng không phải là tuyệt đối an toàn.

Nếu làm theo cách bạn nói là mã hoá code ngay luôn trong ứng dụng thì trong bản thân ứng dụng cũng phải có code giải mã để ứng dụng đọc và thực thi đoạn code đã mã hoá. Khi đã hack được file .exe thì lấy gì họ không đọc được code giải mã.

Theo tôi biết thì trong .NET đã có hàm để mã hoá luôn rồi, dùng mã hoá file App.config đi theo ứng dụng .NET. Bạn tìm hiểu lại xem.
 
Lần chỉnh sửa cuối:
Bạn có thể ví dụ 1 trong những cái chuỗi này như thế nào không?
Với NET, khi Visual Studio build một cái phần mềm chạy trên Windows thì cái exe nó đi kèm với một cái App.config
Nếu build đàng hoàng thì nó nằm trong mục connectionStrings của App.config
Vấn đề bây giờ là cần mã hoá cái file trên, hoặc mã hoá đúng mục trên của cái file.

(*) App.config là một file text, cấu trúc dạng XML. Dùng Notepad mở ra, tìm cái tag <connectionStrings>
 
Bạn có thể ví dụ 1 trong những cái chuỗi này như thế nào không?

Ví dụ 1 chuỗi đơn giản :
dim Vetmini as String = "Server=Vetmini;Database=Vetmini;User Id=Vetmini;Password=Vetmini;"
Bạn đó muốn mã hóa chuỗi nằm giữa 2 dấu ngoặc kép đó bác. Nhưng thật ra việc mã hóa chuỗi này chỉ mang tính chất làm cho ứng dụng trông có vẻ "nguy hiểm" hơn mà thôi, chứ đã vào đọc được code file .exe thì có trốn đằng trời.
 
Nếu bạn không muốn lưu sống chuỗi ConnectionString(CNS) trong code thì có thêm tham khảo cách làm như sau
1. Viết một ứng dụng Server để luôn listen yêu cầu lấy CNS
2. Phía máy khách khi cần CNS thì yêu cầu Server trả về, như là
mysocket.Connect(ip,port)
CNS = mysocket.Receive(“command_getCNS”)
mysocket.Close()

Tôi chỉ hướng thôi code cụ thể bạn tự làm.
Theo tôi nếu thật quan trọng hoặc ứng dụng có quy mô nhất định thì mới làm như thế này vì khi đó bạn phải có một máy chạy ứng dụng Server 24/24.
 
Lần chỉnh sửa cuối:
... Nhưng thật ra việc mã hóa chuỗi này chỉ mang tính chất làm cho ứng dụng trông có vẻ "nguy hiểm" hơn mà thôi, chứ đã vào đọc được code file .exe thì có trốn đằng trời.
Chủ yếu không cho user mở cái file config ra đọc thôi.
Nếu đã lên đây hỏi thì cũng chẳng cần phải chặt chẽ lắm. Dân chuyên nghiệp thì người ta đã có mấy diễn đàn về dot Net.
 
Chủ yếu không cho user mở cái file config ra đọc thôi.
Nếu đã lên đây hỏi thì cũng chẳng cần phải chặt chẽ lắm. Dân chuyên nghiệp thì người ta đã có mấy diễn đàn về dot Net.
Có lý do ở đây nè:
Nhưng ở chỗ khác không đông vui và Support nhanh như ở đây
Người ta nói đốt dữ quá cháy đen thui hết chỗ chơi vui rồi phải vào đây tìm anh Vetmini đấy chứ.
 
Ví dụ 1 chuỗi đơn giản :
dim Vetmini as String = "Server=Vetmini;Database=Vetmini;User Id=Vetmini;Password=Vetmini;"
Bạn đó muốn mã hóa chuỗi nằm giữa 2 dấu ngoặc kép đó bác. Nhưng thật ra việc mã hóa chuỗi này chỉ mang tính chất làm cho ứng dụng trông có vẻ "nguy hiểm" hơn mà thôi, chứ đã vào đọc được code file .exe thì có trốn đằng trời.

Bạn nói chuẩn ý mình rồi. Mình đặt chuỗi kết nối ngay trong file .Exe chứ không đặt trong file setting App.config.
Bài đã được tự động gộp:

Nếu bạn không muốn lưu sống chuỗi ConnectionString(CNS) trong code thì có thêm khảo khảo cách làm như sau
1. Viết một ứng dụng Server để luôn listen yêu cầu lấy CNS
2. Phía máy khách khi cần CNS thì yêu cầu Server trả về, như là
mysocket.Connect(ip,port)
CNS = mysocket.Receive(“command_getCNS”)
mysocket.Close()

Tôi chỉ hướng thôi code cụ thể bạn tự làm.
Theo tôi nếu thật quan trọng hoặc ứng dụng có quy mô nhất định thì mới làm như thế này vì khi đó bạn phải có một máy chạy ứng dụng Server 24/24.
Hi anh.
Cái này cao siêu quá, trình của em không làm được. Em cũng có máy chạy server 24/24.
Anh có thể hướng dẫn em chi tiết chút nữa được không, hoặc chỉ giúp em Key google để tìm hiểu và học hỏi.

Em cảm ơn anh nhiều
 
Chủ yếu không cho user mở cái file config ra đọc thôi.
Nếu đã lên đây hỏi thì cũng chẳng cần phải chặt chẽ lắm. Dân chuyên nghiệp thì người ta đã có mấy diễn đàn về dot Net.

Cảm ơn anh đã phản hồi. nói thật hỏi ở GPE được các anh hỗ trợ rất nhanh và nhiệt tình. Hỏi ở diễn đàn khác có chờ cả tháng cũng không thấy phản hồi gì cả. Cho dù là những câu " Câu hỏi của bạn không rõ dàng, bạn có thể nói rõ hơn không ?" cũng chả nhận được.

Tiện đây cho em hỏi thêm:

Cấu hình người dùng : sau khi người dùng lưu cấu hình => OK đã sử dụng được cho lần sau => Sao mở file . config lại không thấy phần lưu đâu.
VD:
- Ban đầu ntn:
<setting name="Kho_A" serializeAs="String">
<value />
- Người dùng cấu hình "Kho_A ="ABC" => Lưu lại => lẽ ra mở file .config lên nó phải là như thế này:

<setting name="Kho_A" serializeAs="String">
<value>ABC</value>

Tại sao em mở ra nó vẫn như ban đầu
<setting name="Kho_A" serializeAs="String">
<value />

Cho em hỏi vậy dữ liệu người dùng đã lưu thì được lưu trữ tại đâu ( Lưu ý: Em đã dùng My.Settings.Save() và đã lưu được cấu hình cho lần sử dụng sau OK)

Em cảm ơn nhiều
 
Hi anh.
Cái này cao siêu quá, trình của em không làm được. Em cũng có máy chạy server 24/24.
Anh có thể hướng dẫn em chi tiết chút nữa được không, hoặc chỉ giúp em Key google để tìm hiểu và học hỏi.

Em cảm ơn anh nhiều

Bạn xem link dưới đây rồi làm theo. Nguyên lý cơ bản là lập trình client-server với giao thức TCP. Lần đầu bạn lập trình món này sẽ rất bỡ ngỡ nhưng nếu làm được thì sau này bạn sẽ ứng dụng vào nhiều việc khác liên quan đến giao tiếp mạng.
 
Bạn có thể ví dụ 1 trong những cái chuỗi này như thế nào không?
Chào anh

Chuỗi của em đúng kiểu như bạn này nói.

Ví dụ 1 chuỗi đơn giản :
dim Vetmini as String = "Server=Vetmini;Database=Vetmini;User Id=Vetmini;Password=Vetmini;"

Em đang để chuỗi này trong ứng dụng Exe luôn. Anh có thể chỉ giúp em giải pháp để bảo mật chuỗi này không ạ. Hoặc đặt chuỗi này ở đâu để an toàn. Mục đích của em là bảo mật Pass đăng nhập SQL server thôi ạ.

Em cảm ơn ạ
Bài đã được tự động gộp:

Bạn xem link dưới đây rồi làm theo. Nguyên lý cơ bản là lập trình client-server với giao thức TCP. Lần đầu bạn lập trình món này sẽ rất bỡ ngỡ nhưng nếu làm được thì sau này bạn sẽ ứng dụng vào nhiều việc khác liên quan đến giao tiếp mạng.
Vâng. cảm ơn anh. Em sẽ tìm hiểu theo hướng dẫn của anh.
 
Về việc mã hóa chuỗi kết nối: nếu bạn đã xác định sẽ có người mở file .exe của bạn ra xem code thì bạn nên ngừng các hoạt động mã hóa chuỗi kết nối nhé, vì có mã hóa kiểu gì cũng có đoạn code giải mã, họ đọc đoạn giải mã thì biết, suy ra việc bạn mã hóa chỉ tự khiến bạn sinh thêm việc vô ích.

Ở trên có giải pháp là bạn tạo ra 1 dịch vụ (window service) chạy trên máy server, dịch vụ này lắng nghe các máy khách và trả về chuỗi kết nối nếu nhận được thông điệp "command_getCNS" nào đó do bạn tự định nghĩa. Cũng khá thú vị nếu bạn muốn thử cho biết.

Về file App.config: MS có vẻ tạo ra file này với mục đích chỉ đọc (read only). Thường sẽ khó khăn nếu bạn muốn sửa đổi file này lúc ứng dụng đang chạy (run time). Nhưng chả vấn đề gì, bản chất chỉ là việc đọc và ghi file text mà thôi, bạn có thể tự tạo file xml cho riêng bạn, thoải mái đọc ghi.

Kết luận: Bạn cứ việc đặt user SA và password thẳng vào file .exe. Vì user và password rất hiếm khi thay đổi, còn file xml bạn sẽ dùng để chứa mỗi IP của server, khi chạy code bạn sẽ ráp 3 thành phần ấy lại thành chuối kết nối là xong. Bạn chỉ cần nghĩ và làm những điều đơn giản như vậy, nên dùng đầu óc tập trung cho những nghiệp vụ quan trọng khác của phần mềm nhé. Còn tại sao không đặt IP của server vào thẳng trong code mà để ngoài file xml thì bạn chưa cần biết, cứ làm theo y vậy là được.
 
Mình có cách mã hóa cùi bắp này, bạn tham khảo & tùy biến cho vui:

ABCDEFVNBCD
0​
GHIJKLIAFGH
1​
MNOPQREMJKL
2​
STUVWXTOPQR
3​
YX0123SUWXY
4​
456789Z5
6​
7​
8​
9​
Lúc đó câu "GAP EM LUC 8H30"


Sẽ được mã hóa thành: "IVK DE 1PB 8A4W"

Câu được mã hóa này, ta có thể dùng chìa khóa mật mã 'SONG LA" để mã hóa lần nữa:

ABCDEFSONG01
GHIJKLLA2345
MNOPQR6789BC
STUVWXDEFHIJ
YX0123KMPQRT
456789UVWXYZ
 
Lần chỉnh sửa cuối:
Về việc mã hóa chuỗi kết nối: nếu bạn đã xác định sẽ có người mở file .exe của bạn ra xem code thì bạn nên ngừng các hoạt động mã hóa chuỗi kết nối nhé, vì có mã hóa kiểu gì cũng có đoạn code giải mã, họ đọc đoạn giải mã thì biết, suy ra việc bạn mã hóa chỉ tự khiến bạn sinh thêm việc vô ích.

Ở trên có giải pháp là bạn tạo ra 1 dịch vụ (window service) chạy trên máy server, dịch vụ này lắng nghe các máy khách và trả về chuỗi kết nối nếu nhận được thông điệp "command_getCNS" nào đó do bạn tự định nghĩa. Cũng khá thú vị nếu bạn muốn thử cho biết.

Về file App.config: MS có vẻ tạo ra file này với mục đích chỉ đọc (read only). Thường sẽ khó khăn nếu bạn muốn sửa đổi file này lúc ứng dụng đang chạy (run time). Nhưng chả vấn đề gì, bản chất chỉ là việc đọc và ghi file text mà thôi, bạn có thể tự tạo file xml cho riêng bạn, thoải mái đọc ghi.

Kết luận: Bạn cứ việc đặt user SA và password thẳng vào file .exe. Vì user và password rất hiếm khi thay đổi, còn file xml bạn sẽ dùng để chứa mỗi IP của server, khi chạy code bạn sẽ ráp 3 thành phần ấy lại thành chuối kết nối là xong. Bạn chỉ cần nghĩ và làm những điều đơn giản như vậy, nên dùng đầu óc tập trung cho những nghiệp vụ quan trọng khác của phần mềm nhé. Còn tại sao không đặt IP của server vào thẳng trong code mà để ngoài file xml thì bạn chưa cần biết, cứ làm theo y vậy là được.
Cảm ơn anh đã trả lời. Em sẽ suy nghĩ về lời khuyên của anh.

Về phần bên dưới:
Về file App.config: MS có vẻ tạo ra file này với mục đích chỉ đọc (read only). Thường sẽ khó khăn nếu bạn muốn sửa đổi file này lúc ứng dụng đang chạy (run time). Nhưng chả vấn đề gì, bản chất chỉ là việc đọc và ghi file text mà thôi, bạn có thể tự tạo file xml cho riêng bạn, thoải mái đọc ghi.

Ý em là tắt phần mềm đi rồi. Mở file . config ra không thấy phân cấu hình người sử dụng lưu => Như vậy không hiểu phần dữ liệu này được lưu ở đâu để khi chương trình bật lại vẫn load được cấu hình đã lưu trước đó mà không phải là mặc định.

Bởi câu hỏi này cũng liên quan đến ý tưởng. ( Cấu hình luôn chuỗi kết nối khi chạy chương trình lần đầu tiên) => Vì không tìm ra dữ liệu được lưu trữ tại đâu mà. Ah. Em xin thông tin thêm. Khi copy tất cả file chứa trong thư mục .exe sang chỗ khác( Thư mục khác) => Mở chương trình thì không còn cấu hình người dùng lưu nữa mà trở về mặc định.

Em cảm ơn
 
MS tạo ra file App.config, lại còn tạo thêm vài lớp gì đó chỉ để tương tác với file này. Khi lần đầu tiên tôi sử dụng các lớp này để lưu thay đổi lên file App.config thì thấy không có tác dụng gì, file App.config vẫn giữ như cũ, nên tôi không thèm xài file App.config nữa.
Giờ không biết MS có thay đổi gì chưa, nên tôi đã nói bạn tự tạo ra file xml đặt chung thư mục với file .exe để có thể đọc ghi các thay đổi người dùng lên file đó tùy thích.
Nếu cần giữ cấu hình người dùng để có thể đọc lại ở máy khác, có thể lưu hẳn vào 1 bảng trên sql server, tùy bạn linh động thôi.
 
Nói ra thì thế nào cũng bị cười chê, VDTT thử encrypt app.config theo hướng dẫn của mấy anh Tây mà mất nửa buổi hôm qua để tìm hiểu và thực hành tưởng thành công rồi mà hôm nay mở ra vẫn báo lỗi. Hôm nay lại lọ mọ thêm 10 phút rồi rút ra trình tự encrypt thế này:

Bước 1: Copy app.config thành 2 file là web.config và backup.config (VDTT tự nghĩ ra thêm backup.config cho an toàn).

Bước 2: Mở cmd và chạy dòng lệnh theo cú pháp như sau:
Mã:
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "Thư\mục\chứa\web.config\đặt\trong\nháy\kép\nhá" -prov "DataProtectionConfigurationProvider"

Bước 3: Xóa đi app.config và đổi web.config thành app.config

Bước 4: Biên dịch lại chương trình hoặc thay thế nội dung file xxx.config (xxx là tên chương trình bạn tạo ra) bằng nội dung của web.config sau encrypt

Và để minh họa, mình có 1 file app.config nội dung:
XML:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    .......
    <connectionStrings>
      <add name="Name"
       providerName="System.Data.OleDb"
       connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=db.accdb;" />
    </connectionStrings>
</configuration>
Sau khi chạy lệnh thu được:
XML:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  .......
   <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
     <CipherData>
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAT2XWu2Q55USZAVHiBh1lPgQAAAACAAAAAAAQZgAAAAEAACAAAACbx2rmanpxDfRV2d/9QZil5LTApB7VfG23wu4rxfUskQAAAAAOgAAAAAIAACAAAAAb7/q6v5zAX/9Av6G33wwnKp9H2+sLve5R/Ch1Y6Xo9WABAAAu9iWEy2uwEYPFTtm/WI7/Bf9R24Y74SePpPCoCBZawQnNqdxoR48ta9hWFmesDPese5OJZGsSrcE1WSdTJV3xzEsYCzNjDurnZ0y3mbbj/98rm93q6eP8HrrZdepNrw8Lvjl6Eq9WiSwUvFaeZcuBvaxZy4g32iYw9ADSoHX0+s5vvhS86fHinCS+zPA5O0t9lM1/8I2DP82NEt9VXdUS19unVHN1KwCgUJ8WWArp/6uFz8JXAo2Nmkbw3FTX5MQwwnUVw3U/w45qDQE21geLEh8Ox4Jn5a1bMQFKbFDWUOvEiMbIyQRbhhJeJkPNOzaj2WeuP+HPSLbHY2cQ6KMKeE0pwgO8zwc3HunCGBMdASveztXwVDpjvkUkqGmemrg9kQacK4S2cBIu8wi1JkEZOE6PW+ooBQ02h5ptPa7eACHaDzATjndFTqfWY/TrQXK2KS+bX4s9sLd356omL0eCQAAAAMlFe4sgFvZ89DminsY5MT9FWJv6HT+/rAXZ9Jm4QUx8EbtB7iJopVbNkDqMwJjqyZ3ntE1tbHd/CyKlFOctvmk=</CipherValue>
     </CipherData>
    </EncryptedData>
  </connectionStrings>
</configuration>
Chuỗi kết nối
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=db.accdb;
Bây giờ đang nằm trong đống
AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAT2XWu2Q55USZAVHiBh1lPgQAAAACAAAAAAAQZgAAAAEAACAAAACbx2rmanpxDfRV2d/9QZil5LTApB7VfG23wu4rxfUskQAAAAAOgAAAAAIAACAAAAAb7/q6v5zAX/9Av6G33wwnKp9H2+sLve5R/Ch1Y6Xo9WABAAAu9iWEy2uwEYPFTtm/WI7/Bf9R24Y74SePpPCoCBZawQnNqdxoR48ta9hWFmesDPese5OJZGsSrcE1WSdTJV3xzEsYCzNjDurnZ0y3mbbj/98rm93q6eP8HrrZdepNrw8Lvjl6Eq9WiSwUvFaeZcuBvaxZy4g32iYw9ADSoHX0+s5vvhS86fHinCS+zPA5O0t9lM1/8I2DP82NEt9VXdUS19unVHN1KwCgUJ8WWArp/6uFz8JXAo2Nmkbw3FTX5MQwwnUVw3U/w45qDQE21geLEh8Ox4Jn5a1bMQFKbFDWUOvEiMbIyQRbhhJeJkPNOzaj2WeuP+HPSLbHY2cQ6KMKeE0pwgO8zwc3HunCGBMdASveztXwVDpjvkUkqGmemrg9kQacK4S2cBIu8wi1JkEZOE6PW+ooBQ02h5ptPa7eACHaDzATjndFTqfWY/TrQXK2KS+bX4s9sLd356omL0eCQAAAAMlFe4sgFvZ89DminsY5MT9FWJv6HT+/rAXZ9Jm4QUx8EbtB7iJopVbNkDqMwJjqyZ3ntE1tbHd/CyKlFOctvmk=
Đấy là cách giải quyết theo nguyện vọng của bạn. Tuy nhiên VDTT tôi phát hiện ra là bạn biết dùng Settings thế thì tại sao bạn lại không dùng ngay cách đó để lưu trữ chuỗi bí mật của mình? Tôi đang mò mẫm lại settings này để có cái minh họa cho bạn.
 
Lần chỉnh sửa cuối:
MS tạo ra file App.config, lại còn tạo thêm vài lớp gì đó chỉ để tương tác với file này. Khi lần đầu tiên tôi sử dụng các lớp này để lưu thay đổi lên file App.config thì thấy không có tác dụng gì, file App.config vẫn giữ như cũ, nên tôi không thèm xài file App.config nữa.
Giờ không biết MS có thay đổi gì chưa, nên tôi đã nói bạn tự tạo ra file xml đặt chung thư mục với file .exe để có thể đọc ghi các thay đổi người dùng lên file đó tùy thích.
Nếu cần giữ cấu hình người dùng để có thể đọc lại ở máy khác, có thể lưu hẳn vào 1 bảng trên sql server, tùy bạn linh động thôi.
Chào anh.

Em hiểu cách dùng file Xml. Nhưng vẫn đề đặt ra là:

Dùng App.config lưu cấu hình . Tuy mở file App.config không thấy thay đổi gì so với mặc định ( Lúc lập trình) => Nhưng lại vẫn lưu được cấu hình người dùng. Vậy phần dữ liệu người dùng cài đặt sẽ được lưu tại đâu ?. Nếu không thể biết ( Xem đã thay đổi ntn) thì có thể setup chuỗi kết nối cho lần chạy đầu tiên.
Mặc dù view được code trong .Exe ( Cái này em chưa thử nhưng thấy bảo có rất nhiều phần mềm có thể view được code file .Dll & Exe )=> Gọi my.setting.sqlcon... nhưng cũng không thể xem được chuỗi đã lưu ( Vì copy chương trình (Bao gồm cả file App.config) sang máy khác là mất luôn chuỗi kết nối đã cài đặt- mất luôn cấu hình đã lưu)
- Tóm lại: Anh có thể giải thích giúp em phần dữ liệu người dùng lưu ( Tương tác với App.config) thì sẽ tìm thấy ở đâu( Có thể xem không) - File App.config mở lên không có thay đổi so với mặc định. Nếu không thể xem thì em sẽ áp dụng theo cách Setup chuỗi kết nối cho lần khởi chạy đầu tiên ( Theo em ( ứng dụng của em) thì nó khả thi) Sang máy mới sẽ cấu hình tất cả lại từ đầu cũng OK.

Em cảm ơn anh nhiều.
Bài đã được tự động gộp:

Nói ra thì thế nào cũng bị cười chê, VDTT thử encrypt app.config theo hướng dẫn của mấy anh Tây mà mất nửa buổi hôm qua để tìm hiểu và thực hành tưởng thành công rồi mà hôm nay mở ra vẫn báo lỗi. Hôm nay lại lọ mọ thêm 10 phút rồi rút ra trình tự encrypt thế này:

Bước 1: Copy app.config thành 2 file là web.config và backup.config (VDTT tự nghĩ ra thêm backup.config cho an toàn).

Bước 2: Mở cmd và chạy dòng lệnh theo cú pháp như sau:
Mã:
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pef "connectionStrings" "Thư\mục\chứa\web.config\đặt\trong\nháy\kép\nhá" -prov "DataProtectionConfigurationProvider"

Bước 3: Xóa đi app.config và đổi web.config thành app.config

Bước 4: Biên dịch lại chương trình hoặc thay thế nội dung file xxx.config (xxx là tên chương trình bạn tạo ra) bằng nội dung của web.config sau encrypt

Và để minh họa, mình có 1 file app.config nội dung:
XML:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    .......
    <connectionStrings>
      <add name="Name"
       providerName="System.Data.OleDb"
       connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=db.accdb;" />
    </connectionStrings>
</configuration>
Sau khi chạy lệnh thu được:
XML:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  .......
   <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
     <CipherData>
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAT2XWu2Q55USZAVHiBh1lPgQAAAACAAAAAAAQZgAAAAEAACAAAACbx2rmanpxDfRV2d/9QZil5LTApB7VfG23wu4rxfUskQAAAAAOgAAAAAIAACAAAAAb7/q6v5zAX/9Av6G33wwnKp9H2+sLve5R/Ch1Y6Xo9WABAAAu9iWEy2uwEYPFTtm/WI7/Bf9R24Y74SePpPCoCBZawQnNqdxoR48ta9hWFmesDPese5OJZGsSrcE1WSdTJV3xzEsYCzNjDurnZ0y3mbbj/98rm93q6eP8HrrZdepNrw8Lvjl6Eq9WiSwUvFaeZcuBvaxZy4g32iYw9ADSoHX0+s5vvhS86fHinCS+zPA5O0t9lM1/8I2DP82NEt9VXdUS19unVHN1KwCgUJ8WWArp/6uFz8JXAo2Nmkbw3FTX5MQwwnUVw3U/w45qDQE21geLEh8Ox4Jn5a1bMQFKbFDWUOvEiMbIyQRbhhJeJkPNOzaj2WeuP+HPSLbHY2cQ6KMKeE0pwgO8zwc3HunCGBMdASveztXwVDpjvkUkqGmemrg9kQacK4S2cBIu8wi1JkEZOE6PW+ooBQ02h5ptPa7eACHaDzATjndFTqfWY/TrQXK2KS+bX4s9sLd356omL0eCQAAAAMlFe4sgFvZ89DminsY5MT9FWJv6HT+/rAXZ9Jm4QUx8EbtB7iJopVbNkDqMwJjqyZ3ntE1tbHd/CyKlFOctvmk=</CipherValue>
     </CipherData>
    </EncryptedData>
  </connectionStrings>
</configuration>
Chuỗi kết nối

Bây giờ đang nằm trong đống

Đấy là cách giải quyết theo nguyện vọng của bạn. Tuy nhiên VDTT tôi phát hiện ra là bạn biết dùng Settings thế thì tại sao bạn lại không dùng ngay cách đó để lưu trữ chuỗi bí mật của mình? Tôi đang mò mẫm lại settings này để có cái minh họa cho bạn.
Chào anh.

Anh có thể hướng dẫn em cách làm với VB.net không ạ. Cái anh làm bên trên hình như là Asp.net.
Với lại anh nghiên cứu giúp em cái file setting với ạ ( Cũng là file Xml nhưng cái này nó khác với cái file xml mà mình tự làm).

Em cảm ơn anh nhiều.
 
Chiếu theo lời của bài #19 thì thớt chưa nắm vững dot NET và Visual Studio.
Nên nghiên cứ kỹ lại đi. Nhất là phần nhiệm vụ của config.
 
Web KT
Back
Top Bottom