banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật hỏi về mySQL (phần routine - access control)  XML
  [Question]   hỏi về mySQL (phần routine - access control) 23/04/2012 21:04:33 (+0700) | #1 | 261936
vnpt2324
Member

[Minus]    0    [Plus]
Joined: 22/04/2012 11:48:13
Messages: 5
Offline
[Profile] [PM]
Xin chào mọi người.
Mình đang làm bài tập lớn về mySQL, áp dụng các biện pháp bảo mật vào ứng dụng.
Khi làm việc với phần routines - điều khiển truy nhập:
mình đang bị vướng phần phân quyền khi người dùng truy cập vào server của mình. Tức là, với mỗi phiên làm việc (khi người dùng đăng nhập) mình sẽ phải cấp quyền cho họ thao tác được với những vùng nào của CSDL.
Ví dụ, họ không được phép xoá bảng dữ liệu không liên quan,
Không được phép xem thông tin người dùng khác...

Rất mong mọi người giúp đỡ (có một đoạn code ví dụ càng tốt ạ).
Cảm ơn mọi người
[Up] [Print Copy]
  [Programming]   hỏi về mySQL (phần routine - access control) 24/04/2012 19:54:03 (+0700) | #2 | 262005
[Avatar]
Mask__
Member

[Minus]    0    [Plus]
Joined: 16/02/2012 17:28:30
Messages: 58
Location: shinobi
Offline
[Profile] [PM]
CODE:
1 . Tạo Login, phân quyền login
Create Login <name> with password = ' '
Exec sp_addsrvrolemember @loginame ='name' @rolename= ' quyền cấp' //Cấp quyền cho login

2. Tạo User, phân quyền user thao tác trên bảng
User <Database>
Create user <user name>
for Login <Login name>
Grant / revoke/ deny/ select
On database_dbo.tablename // Bảng cần thao tác
to <User name>

Tình cờ là hình hài của chúa khi vi hành...
[Up] [Print Copy]
  [Question]   hỏi về mySQL (phần routine - access control) 29/04/2012 07:27:53 (+0700) | #3 | 262169
vnpt2324
Member

[Minus]    0    [Plus]
Joined: 22/04/2012 11:48:13
Messages: 5
Offline
[Profile] [PM]
Cảm ơn bạn!

Mình sử dụng mySQL workbend, và gặp một số vấn đề:
- Không thể sử dụng câu lệnh create login
- Khi mình tạo một stored program

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `temp`()
BEGIN
declare user varchar(45);
set userName = 'vnpt';

USE mydata;
CREATE user userName@'localhost';

grant select
on mydata.products
to userName@'localhost';
END


thì nó báo lỗi biến userName.

- Khi mình có tạo một PROCEDURE

CREATE DEFINER=`root`@`localhost` PROCEDURE `User_checkLogin`(
in userName varchar(45),
in passWord varchar(500)
)
BEGIN
declare userID INTEGER;
declare acount varchar(100);
SET userID =0;
SELECT User_ID into userID
FROM mydata.users
WHERE (User_Name = userName) and (User_Password = passWord);

IF (userID != 0) THEN
GRANT SELECT
ON mydata.products
to userName@localhost;

SELECT * FROM users
WHERE (User_ID = userID);
ELSE
SELECT null;
END IF;
END


Chuơng trình chạy với 2 tham số đầu vào userName = 'vnpt' và pass = '2' không báo lỗi gì, đăng nhập thành công.
Tuy nhiên, khi mình tác động (action 1):

define("DB_DSN","mysql:host=localhost; dbname=mydata;charset=UTF-8" );
define("DB_USERNAME", "vnpt" );
define("DB_PASSWORD", "" );
$conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ));
$sql = "Select * From products";
$st = $conn->prepare($sql);
$st->execute();


Thì nó thông báo lỗi
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000] [1044] Access denied for user 'vnpt'@'localhost' to database 'mydata''

Mình nghĩ, có phải lúc mình TO userName@'localhost' sẽ khác với việc ta thực hiện 'vnpt'@'localhost' (mà mình dùng lệnh này thì lại thành công với action 1)
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|