<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    SQL Bad Practices: Underspecified Identifier

    ABSTRACT

    不應在調用程序的權限程序包中使用沒有架構的標識符。

    EXPLANATION

    在調用程序的權限或 AUTHID CURRENT_USER 程序包中,標識符是根據當前用戶的架構首先解析的。如果該代碼的定義程序未明確表明標識符所屬的架構,這可能會導致意外的行為。

    例:下列代碼通過在權限表中查找用戶來檢查該用戶是否具有執行相應操作的權限。大多數用戶僅具有 SYS.PERMISSIONS 的讀取權限,且無法修改已定義的權限。


    CREATE or REPLACE FUNCTION check_permissions(
    p_name IN VARCHAR2, p_action IN VARCHAR2)
    RETURN BOOLEAN
    AUTHID CURRENT_USER
    IS
    r_count NUMBER;
    perm BOOLEAN := FALSE;
    BEGIN
    SELECT count(*) INTO r_count FROM PERMISSIONS
    WHERE name = p_name AND action = p_action;
    IF r_count > 0 THEN
    perm := TRUE;
    END IF;
    RETURN perm;
    END check_permissions


    如果調用 check_permissions 函數的用戶在其架構中定義了一個 PERMISSIONS 表,則該數據庫會解析該標識符以引用本地表。該用戶將具有對新表的寫入權限,并可以對其進行修改以獲得在其他情況下不可能擁有的權限。

    REFERENCES

    [1] Oracle Oracle Database PL/SQL Language Reference


    Copyright 2013 Fortify Software - All rights reserved.
    (Generated from version 2013.1.1.0008 of the Fortify Secure Coding Rulepacks)
    desc.structural.sql.sql_bad_practices_underspecified_identifier

    97av