Change password user database sql server như thế nào năm 2024

Mình có quyền user sa, quản lý hết hệ thống. Mình tạo ra 1 user us và gán quyền sysadmin. Trong quá trình sử dụng, us tạo ra 1 user us2. Với quyền sa thì mình có thể biết được password của us2 không và làm cách nào? (của us thì mình biết vì mình tạo ra mà !)

Vấn đề biết pass của us2 khá quan trọng vì dùng để thay đổi. Vì mình phải sử dụng database do us2 tạo ra (owner là us2). Nếu sau này us2 "lật ngang", nhảy vào phá database của mình thì tiêu luôn. Mà xóa us2 không được (do không thể drop user owner nếu chưa xóa database). Dĩ nhiên là không thể cung cấp sẵn us2 và pass rồi bảo hắn dùng (vì hắn là soft thôi à !).


Theo nguyên tắc của pasword thì nếu có quyền thì you chỉ có thể đổi pwd chứ không xem được pasword. SQL Sever cũng thế, password được mã hóa one way nên không giải mã được. Có 1 số program có thể xem được cache password ở nhưng tui không sure là có xem đươc cho SQL Server enterprice Manager không.


Thật ra , đó là soft kế toán. Mình muốn tìm hiểu pass của us2 để tìm và thay đổi cả trong client (cái này còn phải hỏi thêm nữa). Vì lý do riêng mà server của mình phải public. Nếu các anh nhân viên bên cty làm phần mềm khế toán ấy nổi khùng lên, connect vào vơi user us2 kia và delete hay nghịch phá datbase thì có mà chết!

Phần mềm này làm theo cách sau : 1 user sql(us2: owner database) dùng chung cho tất cả các client. Phân quyền user của soft lưu trong database.


Như xbacala nói, với quyền sa, bạn có thể đổi mật khẩu của bất cứ login account nào trong SQL Server của bạn mà không cần phải biết mật khẩu cũ. Ngoài ra bạn cũng có thể drop các login account kể cả nó là chủ sở hữu các db object. Trước khi xóa, bạn cần phải chuyển quyền sở hữu cho login account khác.

Tuy không hiểu rõ mô hình quản lý user của bạn nhưng tôi cảm thấy bạn thiết kế không ổn lắm.


Cảm ơn bạn. Mình chỉ là người sử dụng. Nhưng lo lắng cho sự an toàn bảo mật nên mới tìm hiểu thêm. Qua tìm hiểu, mình thấy mô hình của soft này như sau :

- Các client dùng dung 1 user (us2) để kết nối với SQL server, pass được lập sẵn, mình không biết được.

- Sau khi kết nối với SQL server (chỉ cần chạy soft, chọn được database tức là đã kết nối !) thì các client phải nhập user và pass (được lưu trong database đó) thì có thể vào sử dụng chương trình.

Vấn đề đặt ra ở đây là với us2 "cứng" kia, nó giống như một cái cửa sau mà nếu bất cứ ai biết pass của nó (mà nhân viên cty lập trình kia biết !)thì có thể truy cập vào database của mình vì us2 bắt buộc phải có quyền truy cập vào thì các client của mình mới hoạt động được.

Như vậy, để an toàn dữ liệu, mình thiết lập và phân quyền các "user trong database" để dùng soft. Còn cái user us2 kia mình không can thiệp vào được. Nó giống như con dao treo trên cổ vậy !

Nếu mình đổi được pass của us2 được lưu "cứng" trong soft và thay đổi trong SQL server thì sẽ an toàn hơn mà các client của mình (chứ không phải của họ) vẫn hoạt động truy cập được.

Mình không rành về lập trình nên suy nghĩ theo hướng : muốn tìm pass nằm chỗ nào trong soft để mà đổi thì ít nhất phải biết pass nó là gì đã !!!


sephiroth2m

23-10-2007, 12:32

Theo mình hiểu thì nếu cái soft kia lưu mật khẩu của us2 bên trong chương trình (hard coded) thì không có cách nào để giấu pass cho nhân viên cty lập trình biết. Trường hợp họ lưu bên ngoài (ra 1 file bất kỳ chẳng hạn) thì bạn có thể thay đổi được mật khẩu. Trong cả 2 trường hợp mình nghĩ tốt nhất bạn nên trao đổi thẳng thắn với họ


nếu 1 application thông thoáng thì phải cho client config các thông số connect tới SQL (dạng như Options hay Config). Cái này tùy vào người viết software.


hoangchau

23-10-2007, 21:11

Theo nguyên tắc của pasword thì nếu có quyền thì you chỉ có thể đổi pwd chứ không xem được pasword. SQL Sever cũng thế, password được mã hóa one way nên không giải mã được. Có 1 số program có thể xem được cache password ở nhưng tui không sure là có xem đươc cho SQL Server enterprice Manager không.

Nếu có pass SA, thì đây là 1 câu select sơ đẵng để lấy pass cảc user khác:

create table tempdb..passwords( pwd varchar(255) ) create table tempdb..foo( pwd varchar(255),name varchar(255) ) insert into tempdb..foo select name, pwd from tempdb..passwords inner join sysxlogins on (pwdcompare( pwd, sysxlogins.password, 0 ) = 1) union select name, name from sysxlogins where (pwdcompare( name, sysxlogins.password, 0 ) = 1) union select sysxlogins.name, null from sysxlogins join syslogins on sysxlogins.sid=syslogins.sid where sysxlogins.password is null and syslogins.isntgroup=0 --and syslogins.isntuser=0 begin declare @ret varchar(8000) set @ret='' select @ret=@ret+'~~~~~'+tempdb..foo.name+'/'+tempdb..foo.pwd from tempdb..foo where tempdb..foo.name>@ret select @ret as ret end

drop table tempdb..passwords drop table tempdb..foo Thử xem sao nhé!


cái này chỉ mò ra những account có username và pasword giống nhau thôi, còn khác nhau thì bó tay.


nếu 1 application thông thoáng thì phải cho client config các thông số connect tới SQL (dạng như Options hay Config). Cái này tùy vào người viết software.

Chính xác là vậy đó. Thậm chí muốn đổi port cũng không được. Nếu đổi port của SQL server khác port mặc định là soft không chạy !