<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 42.5\. 可信的和不可信的 PL/Perl 通常,PL/Perl 是作為一種叫`plperl`的"可信"編程語言安裝的。在這種設置中, 為了保持安全,某些 Perl 操作被關閉掉了。通常,受限制的操作都是那些和環境相互交互的動作。 這包括文件句柄操作、`require` 、`use`(對于外部模塊)。 沒有辦法訪問數據庫服務器進程內部或者獲取具有服務器進程權限的 OS 級別的訪問,就像 C 函數那樣。 因此,任何非特權的數據庫用戶都可以允許使用這種語言。 這里是一個無法運轉的函數的例子,因為出于安全原因,文件系統的操作是不允許的: ``` CREATE FUNCTION badfunc() RETURNS integer AS $$ my $tmpfile = "/tmp/badfile"; open my $fh, '>', $tmpfile or elog(ERROR, qq{could not open the file "$tmpfile": $!}); print $fh "Testing writing to a file\n"; close $fh or elog(ERROR, qq{could not close the file "$tmpfile": $!}); return 1; $$ LANGUAGE plperl; ``` 創建這個函數將會失敗,因為它使用的非法調用將會被驗證器捕獲。 有時候想寫不受限制的 Perl 函數。比如,可能需要一個能發送郵件的 Perl 函數。為了處理這種情況, PL/Perl 也可以安裝為"不可信的"的語言PL/PerlU。 在這種情況下,可以使用完整的 Perl 語言。當安裝這個語言時,`plperlu` 這個名字可以選取不可信的 PL/Perl 變種。 PL/PerlU函數的作者必須注意不能把該函數用于做任何不想做的事情, 因為它可以干任何數據庫管理員能干的事情。請注意數據庫系統只允許數據庫超級用戶創建不可信語言寫的函數。 如果上面的函數由超級用戶用`plperlu`創建,那么執行就會成功。 同樣的方式,如果語言被聲明為`plperlu`而不是`plperl`, 那么用Perl寫的匿名代碼塊可以使用受限制的操作,但是調用者必須是超級用戶。 > **Note:** 當PL/Perl函數在一個單獨的為每個SQL用戶的Perl解釋器里運行時, 所有的PL/PerlU函數在一個單獨的Perl解釋器里的給定會話中執行 (不是用于PL/Perl函數的那個解釋器)。這允許PL/PerlU 函數自由的分享數據,但是在PL/Perl和PL/PerlU 函數之間不會有通訊發生。 > **Note:** Perl在一個進程中不能支持多個解釋器,除非在編譯時給它適當的標志,`usemultiplicity` 或 `useithreads`。(`usemultiplicity`是首選的,除非你實際需要使用線程。 獲取更多信息,請參閱perlembed手冊頁。) 如果PL/Perl與一個沒有這樣編譯的Perl的副本一起使用,那么每個會話只可能有一個Perl解釋器, 所以任意一個會話只能執行PL/PerlU函數,或PL/Perl函數, 他們都是通過同一個SQL角色調用的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看