On Thu, Oct 2, 2008 at 1:29 PM, Olaf Stein
<[EMAIL PROTECTED]> wrote:
> Hi all,
>
> In my master/salve setup the only database I do not replicate is mysql.
> The slave has only the users absolutely necessary to select and administer,
> that is why a lot of the users I have on the master are not there.
>
> When I create a view on the master the definer is set to the user I am
> logged in as. As this user does not exist on the slave the view is created
> there but I cannot select from it.
>
> I tried setting the definer to current_user in the hope it would mean "user
> logged in in current session", not "user that was logged in when creating
> the view".
>
> How can I get around this, I do not want to re-create all user that
> potentially could create views on the slave.
>
> Thanks
> Olaf
>

Take a look at SQL SECURITY INVOKER

Example:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\rob>"c:\Program Files\MySQL\MySQL Server 5.0\bin\mysql
.exe" -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.0.51a-community-nt-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> grant select on test.* to bob identified by 'stuff';
Query OK, 0 rows affected (0.00 sec)

mysql> grant select,create view on test.* to joe identified by 'stuff';
Query OK, 0 rows affected (0.00 sec)

mysql> use test;
Database changed
mysql> create table t(c int);
Query OK, 0 rows affected (0.31 sec)

mysql> insert into t values(1),(3);
Query OK, 2 rows affected (0.16 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> exit
Bye

C:\Documents and Settings\rob>"c:\Program Files\MySQL\MySQL Server 5.0\bin\mysql
.exe" -u joe -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.0.51a-community-nt-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test;
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t              |
+----------------+
1 row in set (0.00 sec)

mysql> create SQL SECURITY INVOKER VIEW viewy AS select c+1 from t;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

C:\Documents and Settings\rob>"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql
.exe" -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.0.51a-community-nt-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> drop user joe;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

C:\Documents and Settings\rob>"c:\Program Files\MySQL\MySQL Server 5.0\bin\mysql
.exe" -u bob -p
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.0.51a-community-nt-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test;
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t              |
| viewy          |
+----------------+
2 rows in set (0.00 sec)

mysql> select * from viewy;
+------+
| c+1  |
+------+
|    2 |
|    4 |
+------+
2 rows in set (0.00 sec)


-- 
Rob Wultsch
[EMAIL PROTECTED]

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to