what is it means to "to package the permission with the stored procedure", do you mean that the permission will be available for only this stored procedure ?
Yes. If you grant the bulk permission to the user, this means that the user can load any file on the server, of which some may include sensitive data. Say that you only want the user to be able to load files in a certain folder. Then you could write the SP so that it validates the input pat and only accepts permitted paths.
But if you are not uncomfortable with granting the database user the server-level permission, there is little reason to dabble with this. I only mentioned it in case granting a server-level permission would be a a concern to you.
An addition to the @Erland Sommarskog method there is another one.
There is a server-level role called bulkadmin that does that. Rather than directly granting the permission to a user account you could add a user or group to that role.
I did mention bulkadmin in my post, but I preferred to give the example with the explicit permission. It's more or less a toss-up which one to use.
Yitzhak make a good point about roles. Rather than granting permission directly to the user, you could do:
USE master
go
CREATE SERVER ROLE bulkusers
GRANT ADMINISTER BULK OPERATIONS TO bulkusers
ALTER SERVER ROLE bulkusers ADD MEMBER user_for_that_database
If the need would arise for another database, you can simply add that database user to bulkusers.
can you please guide me how can I do it, because in the server level tree "security > logins" I don't have this database user in the list, I have this user in the database tree "security > users"...
The one situation where the above would not work would be if you have created these database users as database users WITHOUT LOGIN. Keep in mind is that all you told us is that you have these database users, but you did not tell us how they have been set up.