         from sec_user_authcred_log cl
        where cl.user_id = p_user_id 
          and cl.auth_path_id = l_uac.auth_path_id
-         and cl.credential_hash <> sec_user_authcred_hash(p_session_id, p_credential, l_uac.auth_path_id)
+         and cl.credential_hash <> sec_user_authcred_hash(p_session_id, p_user_id, p_credential, l_uac.auth_path_id)
          and cl.when_logged > clock_timestamp() - l_min_cred_age -- сколько дней нельзя менять учетные данные
        order by cl.when_logged desc
        limit 1;
       if (found) then -- учетные данные менялись в течении послених N дней
         -- 'SEC00023', 'credential must not be changed "%1$s" after previos changes at "%2$s"'
-        return env_resource_text_find_by_code('SEC00023', l_min_cred_age, moment);
+        return env_resource_text_find_by_code('SEC00023');
       end if;
       -- поиск совпадений новых учетных данных со старыми во всей истории из 
       -- журнала изменений учетных данных или с ограничением глубины анализа истории
       -- TODO: переделать. надо считать кол-во смен паролей, а не кол-во строк
-      select 1 
-        from sec_user_authcred_log cl
-       where cl.user_id = p_user_id 
-         and cl.auth_path_id = l_uac.auth_path_id
-         and cl.credential_hash = sec_user_authcred_hash(p_session_id, p_credential, l_uac.auth_path_id)
-         and cl.when_logged > clock_timestamp() - l_max_cred_age -- сколько дней нельзя использовать такие-же учетные данные
-       order by cl.when_logged
-       limit l_authcred_log_depth; -- глубина просмотра журнала истории
-      if (found) then -- совпадения найдены
+      select count(1)
+        into res
+        from (
+              select row_number() over (order by cl.when_logged desc) as rn
+                from sec_user_authcred_log cl
+               where cl.user_id = p_user_id 
+                 and cl.auth_path_id = l_uac.auth_path_id
+                 and cl.credential_hash = sec_user_authcred_hash(p_session_id, p_user_id, p_credential, l_uac.auth_path_id)
+                 and cl.when_logged > clock_timestamp() - l_max_cred_age -- сколько дней нельзя использовать такие-же учетные данные
+             ) s
+       where rn < l_authcred_log_depth; -- глубина просмотра журнала истории
+      if (res > 0) then -- совпадения найдены
         return env_resource_text_find_by_code('-----');
       end if;
 



--
-- Name: pk_opn_operation; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
--


25	2016-01-06 02:24:43.068885+03	\N	40
1	2016-01-06 02:30:12.134391+03	\N	41
25	2016-01-06 02:30:12.150434+03	\N	42
1	2016-01-06 23:48:35.364139+03	\N	94
25	2016-01-06 23:48:35.40549+03	\N	96
1	2016-01-07 00:23:49.704738+03	\N	103
25	2016-01-07 00:23:49.718982+03	\N	104
1	2016-01-07 00:23:59.738338+03	\N	105
25	2016-01-07 00:23:59.75326+03	\N	106
1	2016-01-07 00:25:13.28023+03	\N	107
25	2016-01-07 00:25:13.295131+03	\N	108
1	2016-01-07 00:25:13.920181+03	\N	109
25	2016-01-07 00:25:13.934574+03	\N	110
1	2016-01-07 00:28:58.357206+03	\N	111
25	2016-01-07 00:28:58.373675+03	\N	112
1	2016-01-07 01:52:23.623494+03	\N	113
25	2016-01-07 01:52:23.664417+03	\N	114
25	2016-01-07 01:56:08.150061+03	\N	115
25	2016-01-07 01:58:11.868894+03	\N	119
25	2016-01-07 01:59:24.262703+03	\N	120
1	2016-01-07 02:18:15.185377+03	\N	122
25	2016-01-07 02:18:15.205314+03	\N	123
\.


