精华内容
下载资源
问答
  • 本文如何授予某个用户只能查看某些存储过程的定义权限,而不能让用户去修改、执行存储过程,进行了梳理和总结,供大家参考。
  • 对于PL/SQL存储过程调用来说,具有两种权限控制方式:定义权限和调用者权限定义权限表示用户在执行PL/SQL代码时候,是否有权访问代码中所涉及对象如表等,是根据创建该PL/SQL用户是否拥有其访问权来...

    对于PL/SQL存储过程的调用来说,具有两种权限控制方式:定义者权限和调用者权限。定义者权限表示用户在执行PL/SQL代码的时候,是否有权访问代码中所涉及的对象如表等,是根据创建该PL/SQL的用户是否拥有对其访问权来决定的,而调用者权限则是根据执行该PL/SQL的用户是否具有对其中涉及的对象的访问权来决定是否可访问的。缺省情况下,PL/SQL存储过程都是以定义者权限来执行的。以下例子说明了其含义。

    创建一个用户u1,该用户试图去访问hr用户的表employees,但因为没有权限而失败
    conn / as sysdba
    create user u1 identified by u1;
    grant connect, resource to u1;
    conn u1/u1
    select last_name from hr.employees where employee_id=101;

    ERROR at line 1:
    ORA-00942: table or view does not exist

    现在hr用户创建一个存储过程,并在其中实现对表employees的访问
    conn hr/hr
    create or replace procedure p_get_lastname1(v_employee_id in employees.employee_id%type,
                                                v_last_name   out employees.last_name%type) is
    begin
        select last_name
          into v_last_name
          from employees
         where employee_id = v_employee_id;
    end;
    /

    现在把执行该存储过程的权限赋给u1用户,u1用户便可以通过该存储过程间接实现对表employees的访问
    grant execute on p_get_lastname1 to u1;
    conn u1/u1
    var ls_lastname varchar2(50);
    exec hr.p_get_lastname1(101,:ls_lastname);

    PL/SQL procedure successfully completed.

    print ls_lastname;

    LS_LASTNAME
    ------------------------
    Kochhar

    这里之所以能访问就是利用了PL/SQL默认的定义者权限机制,因为该存储过程是由hr用户自己定义的,hr用户自然可以访问自己的表。因此借用定义者权限,u1用户虽然本身没有对表employees的访问权,但借助存储过程同样实现了对该表的访问。

    再看调用者权限的使用,现在创建另一个用户u2,以u2来执行hr用户创建的另一个存储过程
    conn / as sysdba
    create user u2 identified by u2;
    grant connect,resource to u2;
    conn hr/hr
    create or replace procedure p_get_lastname2(v_employee_id in employees.employee_id%type,
                                                v_last_name   out employees.last_name%type)
        authid current_user is
    begin
        select last_name
          into v_last_name
          from employees
         where employee_id = v_employee_id;
    end;
    /
    grant execute on p_get_lastname2 to u2;
    conn u2/u2
    var ls_lastname varchar2(50);
    exec hr.p_get_lastname2(101,:ls_lastname);

    ERROR at line 1:
    ORA-00942: table or view does not exist
    ORA-06512: at "HR.P_GET_LASTNAME2", line 5
    ORA-06512: at line 1

    这里之所以执行失败是因为存储过程在定义时被指定为调用者权限(通过authid current_user指定),而调用者u2没有访问employees表的权限,因此执行没有成功。

    对于定义者权限的PL/SQL程序来说,通过角色传入的权限是不能作用于存储过程里面的。以下例子说明了这点
    conn / as sysdba
    create user u3 identified by u3;
    grant dba to u3;
    conn u3/u3
    create or replace procedure p_test is
    begin
        dbms_utility.exec_ddl_statement('grant dba to u1');
    end;
    /
    exec p_test;

    ERROR at line 1:
    ORA-01932: ADMIN option not granted for role 'DBA'
    ORA-06512: at "SYS.DBMS_UTILITY", line 574
    ORA-06512: at "U3.P_TEST", line 3
    ORA-06512: at line 1

    虽然u3用户被授予了DBA权限,但是默认指定的定义者权限创建的存储过程是不能获得DBA这个角色所传递过来的权限的,因此执行仍然没有足够的权限,DBMS_UTILITY包无法访问。此时可将该存储过程改为调用者权限,这样u3用户就能够正常执行了。
    create or replace procedure p_test authid current_user is
    begin
        dbms_utility.exec_ddl_statement('grant dba to u1');
    end;
    /
    exec p_test;

    PL/SQL procedure successfully completed.


    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28974745/viewspace-2144738/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/28974745/viewspace-2144738/

    展开全文
  • mysql中用户对存储过程的权限有: ALTER ROUTINE 编辑或删除存储过程 CREATE ROUTINE 创建存储过程 EXECUTE运行存储过程 存储过程创建者拥有存储过程ALTER、CREATE、EXECUTE权限。 详细实验后续补充。 ...

    mysql中用户对存储过程的权限有:

    ALTER ROUTINE 编辑或删除存储过程

    CREATE ROUTINE 创建存储过程

    EXECUTE运行存储过程

     

    存储过程的创建者拥有存储过程的ALTER、CREATE、EXECUTE权限。

     

    详细实验后续补充。

     

    DEFINER用于指明存储过程是由哪个用户定义的,默认存储过程的定义者是存储过程,跟存储过程的使用权限无关。
    INVOKER用于指定哪些用户有调用存储过程的权限,此时会以调用者的权限去执行存储过程。
    默认情况下被执行的存储过程具有其创建者的权限,比如用户A创建了存储过程P1,用户B运行存储过程P1时,只有用户A有操作权限的数据才能被P1操作。
    假设用户A只有CREATE ROUTINE权限,没有select、update、delete等权限,正常情况下存储过程P1不能执行任何操作。如果在创建存储过程P1时,使用 SQL SECURITY INVOKER特征子句,让存储过程使用运行者的权限,这样即使P1的创建者没有数据操作权限,P1也可以正常使用。


    如果在创建存储过程时指定为root@%,将有可能导致root@localhost在使用存储过程时出现权限问题。


    相关操作方法:
    查看存储过程的创建语句:

    show create procedure 存储过程名;

    查看存储过程的信息:

    show procedure status like '存储过程名'\G

    查看存储过程的Definer信息:

    select db,name,type,definer from mysql.proc where name='存储过程名' and type='PROCEDURE';

    创建存储过程时指定definer字段:

    CREATE
    DEFINER = ‘root@localhost’  -- 默认值
    PROCEDURE 存储过程名 ........

     

    测试存储过程

    delimiter $
    create procedure p_t1(in id int)
    begin
       insert into mysql.t2 values(id,'a');
       select count(*) from mysql.t2;
    end
    $
    delimiter ;

    展开全文
  • mysql中用户对存储过程的权限有:ALTER ROUTINE 编辑或删除存储过程CREATE ROUTINE 创建存储过程EXECUTE运行存储过程存储过程创建者拥有存储过程ALTER、CREATE、EXECUTE权限。详细实验后续补充。DEFINER用于指明...

    mysql中用户对存储过程的权限有:

    ALTER ROUTINE 编辑或删除存储过程

    CREATE ROUTINE 创建存储过程

    EXECUTE运行存储过程

    存储过程的创建者拥有存储过程的ALTER、CREATE、EXECUTE权限。

    详细实验后续补充。

    DEFINER用于指明存储过程是由哪个用户定义的,默认存储过程的定义者是存储过程,跟存储过程的使用权限无关。

    INVOKER用于指定哪些用户有调用存储过程的权限,此时会以调用者的权限去执行存储过程。

    默认情况下被执行的存储过程具有其创建者的权限,比如用户A创建了存储过程P1,用户B运行存储过程P1时,只有用户A有操作权限的数据才能被P1操作。

    假设用户A只有CREATE

    ROUTINE权限,没有select、update、delete等权限,正常情况下存储过程P1不能执行任何操作。如果在创建存储过程P1时,使用

    SQL SECURITY INVOKER特征子句,让存储过程使用运行者的权限,这样即使P1的创建者没有数据操作权限,P1也可以正常使用。

    如果在创建存储过程时指定为root@%,将有可能导致root@localhost在使用存储过程时出现权限问题。

    相关操作方法:

    查看存储过程的创建语句:

    show create procedure 存储过程名;

    查看存储过程的信息:

    show procedure status like '存储过程名'\G

    查看存储过程的Definer信息:

    select db,name,type,definer from mysql.proc where name='存储过程名' and type='PROCEDURE';

    创建存储过程时指定definer字段:

    CREATE

    DEFINER = ‘root@localhost’  -- 默认值

    PROCEDURE 存储过程名 ........

    测试存储过程

    delimiter $

    create procedure p_t1(in id int)

    begin

    insert into mysql.t2 values(id,'a');

    select count(*) from mysql.t2;

    end

    $

    delimiter ;

    展开全文
  • 正常情况下存储过程的定义它有修改、删除的权限;但是其它的用户就要相于的授权,不然无法查看、调用;mysql 中使用用户A创建一个存储过程,现在想通过另一个用户B来修改A创建的存储过程;以下记录就是基于这样的...

    Mysql的存储过程相关权限问题

    在使用mysql数据库经常都会遇到这么一个问题,其它用户定义的存储过程,现在使用另一个用户却无法修改或者删除等;正常情况下存储过程的定义者对它有修改、删除的权限;但是其它的用户就要相于的授权,不然无法查看、调用;

    mysql 中使用用户A创建一个存储过程,现在想通过另一个用户B来修改A创建的存储过程;以下记录就是基于这样的情况产生的;

    db5a149bfdd0665d5a57294eaa217a7b.png

    用户A对OTO3库的权限:

    mysql> show grants for 'a'@'%'; +---------------------------------------------------+ | Grants for a@%                              | +---------------------------------------------------+ | GRANT USAGE ON *.* TO 'a'@'%'               | | GRANT ALL PRIVILEGES ON `OTO3`.* TO 'a'@'%' | +---------------------------------------------------+ 2 rows in set (0.00 sec)

    用户B的权限:

    mysql> show grants for 'swper'@'%'; +----------------------------------------------------------------------+ | Grants for swper@%                                                   | +----------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'swper'@'%'                                    | | GRANT SELECT, UPDATE, DELETE, DROP, ALTER ON `OTO3`.* TO 'swper'@'%' | +----------------------------------------------------------------------+ 2 rows in set (0.00 sec)

    以用户B的身份登陆Mysql操作;

    [root@mysql ~]# mysql -h10.0.10.110 -uswper -p123456

    查存储过程列表时就提示没有权限了:

    mysql> select `name` from mysql.proc where db = 'OTO3' and `type` = 'PROCEDURE'; ERROR 1142 (42000): SELECT command denied to user 'swper'@'mysql' for table 'proc'

    以root身份给B用户添加一个查看存储过程的权限:

    mysql> grant select on mysql.proc to 'swper'@'%'; Query OK, 0 rows affected (0.00 sec)  mysql> show grants for 'swper'@'%'; +----------------------------------------------------------------------+ | Grants for swper@%                                                   | +----------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'swper'@'%'                                    | | GRANT SELECT, UPDATE, DELETE, DROP, ALTER ON `OTO3`.* TO 'swper'@'%' | | GRANT SELECT ON `mysql`.`proc` TO 'swper'@'%'                        | +----------------------------------------------------------------------+ 3 rows in set (0.00 sec)

    再回到B用户里查看存储过程列表:

    mysql> select `name` from mysql.proc where db = 'OTO3' and `type` = 'PROCEDURE'; +------------------------+ | name                   | +------------------------+ | proc_cs                | +------------------------+ 1 rows in set (0.00 sec)

    此时发现多了一个mysql库,但只有对mysql.proc有查询权限:

    mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | OTO3               | | mysql              | +--------------------+ 3 rows in set (0.00 sec)

    mysql库中只有一个表:proc

    mysql> use mysql mysql> show tables; +-----------------+ | Tables_in_mysql | +-----------------+ | proc            | +-----------------+ 1 row in set (0.00 sec)

    同样也可以看到存储过程的详细信息:mysql> show create procedure proc_cs\G *************************** 1. row ***************************            Procedure: proc_cs             sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION     Create Procedure: CREATE DEFINER=`a`@`%` PROCEDURE `proc_cs`() BEGIN

    尝试修改存储过程的配置:

    mysql> ALTER  PROCEDURE proc_cs   MODIFIES SQL DATA SQL SECURITY INVOKER; ERROR 1370 (42000): alter routine command denied to user 'b'@'%' for routine 'OTO3.proc_cs'

    为了方便查看在Navicat工具上尝试修改存储过程,在保存的时候报如下权限问题:

    1227 -Access denied;you need(at least one of)the SUPER privilege(s) for this operation

    尝试添加一个存储过程,报权限信息:

    1044 - Access denied for user 'b'@'%' to database 'OTO3'

    #这里表示b用户没有对OTO3有授权存储过程的修改权限;

    以B用户尝试调用一下存储过程:Procedure execution failed 1370 - execute command denied to user 'b'@'%' for routine 'OTO3.proc_cs'

    #这里很明显连运行权限也没有;

    尝试删除原有的a用户定义的存储过程,也会报权限信息,如下:1370 - alter routine command denied to user 'b'@'%' for routine 'OTO3.proc_cs'

    可以看出B用户连调用存储过程的权限都没有,这里先加入执行权限:

    接下来添加一个执行存储过程的权限:mysql> grant execute on OTO3.* to 'b'@'%'; Query OK, 0 rows affected (0.00 sec)  mysql> show grants for 'b'@'%'; +-------------------------------------------------------------------------------+ | Grants for b@%                                                            | +-------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'b'@'%'                                             | | GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE ON `OTO3`.* TO 'b'@'%' | | GRANT SELECT ON `mysql`.`proc` TO 'b'@'%'                                 | +-------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)

    再次执行一下存储过程,发现成功了;

    时间: 0.080ms

    Procedure executed successfully

    受影响的行: 0

    那再添加一下创建添加存储过程的权限:

    mysql> grant CREATE ROUTINE on OTO3.* to 'b'@'%'; Query OK, 0 rows affected (0.00 sec)  mysql> show grants for 'b'@'%'; +-----------------------------------------------------------------------------------------------+ | Grants for b@%                                                                            | +-----------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'b'@'%'                                                            | | GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE ON `OTO3`.* TO 'b'@'%' | | GRANT SELECT ON `mysql`.`proc` TO 'b'@'%'                                                 | +-----------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)

    上面添加权限后就可以创建存储过程了;CREATE DEFINER=`b`@`%` PROCEDURE `aaaa`() BEGIN     #Routine body goes here... SELECT * from mysql.user; END

    但是自己创建的都无法删除;1370 - alter routine command denied to user 'b'@'%' for routine 'OTO3.aaaa'

    接下来再添加一个修改的权限,也可以删除的哦;

    mysql> grant alter ROUTINE on OTO3.* to 'b'@'%'; Query OK, 0 rows affected (0.01 sec)  mysql> show grants for 'b'@'%'; +--------------------------------------------------------------------------------------------------------------+ | Grants for b@%                                                                                           | +--------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'b'@'%'                                                                            | | GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO 'b'@'%' | | GRANT SELECT ON `mysql`.`proc` TO 'b'@'%'                                                                | +--------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)

    上面添加完alter ROUTINE权限后就可以对OTO3所有的存储过程有删除权限[自己定义的增、删、改],别人定义的可以删除,但是还不能修改;修改别人定义的存储过程会有如下提示:1227 - Access denied; you need (at least one of)the SUPER privilege(s) for this operation

    这里说明一下这个SUPER权限在哪里?通过查看用户权限原来在这里:

    mysql> select * from mysql.user where user='b'\G *************************** 1. row ***************************                   Host: %                   User: b            Select_priv: N            Insert_priv: N            Update_priv: N            Delete_priv: N            Create_priv: N              Drop_priv: N            Reload_priv: N          Shutdown_priv: N           Process_priv: N              File_priv: N             Grant_priv: N        References_priv: N             Index_priv: N             Alter_priv: N           Show_db_priv: N             Super_priv: N  Create_tmp_table_priv: N       Lock_tables_priv: N           Execute_priv: N        Repl_slave_priv: N       Repl_client_priv: N       Create_view_priv: N         Show_view_priv: N    Create_routine_priv: N     Alter_routine_priv: N       Create_user_priv: N             Event_priv: N           Trigger_priv: N Create_tablespace_priv: N               ssl_type:              ssl_cipher:             x509_issuer:            x509_subject:           max_questions: 0            max_updates: 0        max_connections: 0   max_user_connections: 0                 plugin: mysql_native_password  authentication_string: *CCB4F88E945E0E14F9BEB093EB797BB0BDBFA175       password_expired: N  password_last_changed: 2017-03-06 11:37:35      password_lifetime: NULL         account_locked: N 1 row in set (0.00 sec)

    尝试添加一下这个SUPER权限看看:mysql> grant SUPER on OTO3.* to 'b'@'%'; ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES   mysql> grant SUPER on *.* to 'b'@'%'; Query OK, 0 rows affected (0.00 sec)

    不能对指定的库执行这个权限,因为SUPER为全局的就是整个mysql的权限;mysql> show grants for 'swper'@'%'; +--------------------------------------------------------------------------------------------------------------+ | Grants for swper@%                                                                                           | +--------------------------------------------------------------------------------------------------------------+ | GRANT SUPER ON *.* TO 'swper'@'%'                                                                            | | GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO 'swper'@'%' | | GRANT SELECT ON `mysql`.`proc` TO 'swper'@'%'                                                                | +--------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)

    再次检查时会发现 Super_priv: Y 变化了;再修改一下别人定义的存储过程;mysql> select * from mysql.user where user='b'\G

    查看所有数据库,发现mysql库只有一张proc表有读取的权限,SUPER并非我所想象中那么强大;mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | OTO3               | | mysql              | +--------------------+ 3 rows in set (0.00 sec)

    仔细观看会发现执行语句:mysql> select * from mysql.user where user='b'\G

    可以看到有   Create_routine_priv: N和 Alter_routine_priv: N 这两个明显就是对存储过程的权限嘛,能不能不用SUPER而使用这两个权限呢?

    回收一下这个SUPER权限;mysql> revoke super on *.* from 'b'@'%'; Query OK, 0 rows affected (0.01 sec)

    再添加Alter_routine_priv,Create_routine_privmysql> grant alter routine,create routine on *.* to 'b'@'%'; Query OK, 0 rows affected (0.00 sec)  mysql> show grants for 'b'@'%'; +--------------------------------------------------------------------------------------------------------------+ | Grants for b@%                                                                                           | +--------------------------------------------------------------------------------------------------------------+ | GRANT CREATE ROUTINE, ALTER ROUTINE ON *.* TO 'b'@'%'                                                    | | GRANT SELECT, UPDATE, DELETE, DROP, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO 'b'@'%' | | GRANT SELECT ON `mysql`.`proc` TO 'b'@'%'                                                                | +--------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)

    发现还是报相同的权限问题:1227 - Access denied; you need (at least one of)the SUPER privilege(s) for this operation

    执行上面权限后发现,可以看到其它的系统库:[例如sys库也有存储过程,由于这两个权限是全局的]mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | OTO3               | | mysql              | | performance_schema | | sys                | | test               | +--------------------+ 6 rows in set (0.00 sec)

    这两个权限更大,连系统库sys中的存储过程都能看到,甚至修改删除,非常危险;决定再次回收权限create routine,alter routine;mysql> revoke create routine,alter routine on *.* from 'b'@'%';

    还是使用SUPER权限比较安全;

    通过上面的测试得出以下结论:

    1、查看存储过程权限:SELECT #是对mysql.proc表的权限;

    2、执行存储过程权限:EXECUTE  #是对指定数据库的权限;

    3、创建存储过程权限:CREATE ROUTINE #是对指定数据库的权限;

    4、修改存储过程权限:ALTER ROUTINE  #是对指定数据库的中自己定义的存储过程;

    5、修改别人定义的存储过程权限:SUPER  #是对全局整个mysql的权限;

    简来说用户A在数据库OTO3中定义了一个存储过程,现在想用用户B来执行、修改存储过程,需要对用户B添加以下权限:GRANT SELECT ON MYSQL.PROC TO '用户B'; GRANT EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO '用户B'; GRANT SUPER ON *.* TO '用户B';

    所以用户B的最基本的权限:mysql> show grants for 'b'@'%'; +----------------------------------------------------------------------------------------+ | Grants for b@%                                                                     | +----------------------------------------------------------------------------------------+ | GRANT SUPER ON *.* TO 'b'@'%'                                                      | | GRANT SELECT, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `OTO3`.* TO 'b'@'%' | | GRANT SELECT ON `mysql`.`proc` TO 'b'@'%'                                          | +----------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec)

    至此,对于Mysql中以另的用户修改其它人定义的存储过程权限也就非常的显白了;

    如果不是以另一个用户身份调用存储过程,可以使用root权限修改存储过程的定义者; 这样就等于linux里的所有者权限变更了;update mysql.proc set DEFINER='b'@'%' WHERE NAME='proc_cs' AND db='OTO3';

    展开全文
  • mysql中用户对存储过程的权限有: ALTER ROUTINE 编辑或删除存储过程 CREATE ROUTINE 创建存储过程 EXECUTE运行存储过程 存储过程创建者拥有存储过程ALTER、CREATE、EXECUTE权限。 详细实验后续...
  • mysql中用户对存储过程的权限有:ALTER ROUTINE 编辑或删除存储过程CREATE ROUTINE 创建存储过程EXECUTE运行存储过程存储过程创建者拥有存储过程ALTER、CREATE、EXECUTE权限。详细实验后续补充。DEFINER用于指明...
  • 授予Shema dbo下对象的定义权限给某个用户(也就是说该用户可以修改架构dbo下所有表/视图/存储过程/函数的结构) use [Your DB NAME] GRANT VIEW DEFINITION ON SCHEMA :: dbo to [THE USER NAME] 回收某个...
  • 存储过程从定义开始

    千次阅读 2013-03-19 11:53:25
    1. 使用存储过程优点有: (1)存储过程在服务器端运行,执行速度快。...使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作数据库信息访问的权限。 2.创建存储过程可以使用create pr
  • 但MYSQL本身对存储过程定义的语法结构有些限制,也会对用户调用权限做严格筛选,主要与存储过程定义参数:Definer和 Security_type有关,前者是创建存储过程用户,一般是表现形式为root@localhost等;...
  • Mysql修改存储过程相关权限问题

    万次阅读 2020-09-21 21:44:14
    正常情况下存储过程的定义它有修改、删除的权限;但是其它的用户就要相于的授权,不然无法查看、调用; mysql 中使用用户A创建一个存储过程,现在想通过另一个用户B来修改A创建的存储过程;以下记录就是基于这样...
  •  说的简单一点,我们使用拦截器用户的访问权限进行控制时,总不能全部到拦截到吧,如果全部拦截,我们甚至连登陆都做不到,因此我们要清楚的知道有哪些权限需要我们来进行控制,将这些权限的action地址统一存储到...
  • 定义好类jvm会把这个类当做字节码处理。 一个java类可以产生n个属于此类型对象(实例),java类是创建java对象模板,java对象是java类具体表现形式,java类是一个抽象表现。 运行对象访问对象里内容称为封装...
  • 本文主要向大家介绍了SQLServer数据库...根据数据库Schema限制用户数据库的操作行为授予Shemadbo下对象的定义权限给某个用户(也就是说该用户可以修改架构dbo下所有表/视图/存储过程/函数的结构)use[YourDBNAME]GRA...
  • 正常情况下存储过程的定义它有修改、删除的权限;但是其它的用户就要相于的授权,不然无法查看、调用;mysql 中使用用户A创建一个存储过程,现在想通过另一个用户B来修改A创建的存储过程;以下记录就是基于这样的...
  • “定义者权限”(默认)的定义存储过程,不管是哪个用户去执行那个存储过程,都会在“定义者的权限和模式”中执行的(即与执行者无关)。 例如,SCOTT数据库用户有一个PROC1程序程序,这个程序EMP表和EMP表进行...
  • 支持POSIX和BSD文件锁定-包括分布式文件锁定支持 支持特殊文件–块和字符设备,管道和套接字 支持符号链接–指向目标文件文件名,不一定在MooseFS上 支持硬链接–引用MooseFS上相同数据文件名称不同 独特...
  • 写一个函数或者存储过程的定义,代码“主动”这个存储过程 dbms自动触发器的调用 一般来说设定对表进行DML操作,这就是触发条件 create [or replace] trigger 名称 [before/after] insert [or delete or update] ...
  • 许多应用程序都使用存储过程来访问数据,依靠所属权链接来限制基表访问。 您可以授予针对存储过程 EXECUTE 权限,撤消或拒绝针对基表的权限。 如果存储过程和表具有相同所有者,则 SQL Server 不检查调用方...
  • 今天在看定义者、调用者权限部分想到这个问题。 对于调用者权限存储过程,不同用户访问是本用户下表,但是如果存储过程OWNER用户下存储过程所依赖表被删除,其他用户下还能否正常运行这个过程。 做...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 917
精华内容 366
关键字:

对存储权限的定义